


Wer hat gesagt, dass das Schreiben von GUI-Programmen in Python hässlich ist? Das liegt daran, dass Sie nicht wissen, wie man es verschönert!
Apr 11, 2023 pm 01:52 PMBei unserer täglichen Arbeit und unserem Studium schreiben wir häufig einige einfache Python-GUI-Tools, um verschiedene automatisierte Aufgaben auszuführen, z. B. die Stapelverarbeitung von Dateien, die Stapelverarbeitung von Bildern usw. Wenn wir diese Tools schreiben, konzentrieren wir uns oft nur auf die Implementierung von Funktionen und ignorieren die Verschönerung der Seite. Dies macht die in Python erstellten GUI-Programme in den Augen der Leute auch relativ niedrig Verschönerung der Seite, mal sehen, wie in reinem Python geschriebene GUI-Programme auch sehr schön sein können!
Seitenlayout
Wir vervollständigen zunächst ein grundlegendes GUI-Layout
Angenommen, wir möchten ein Hexadezimalkonvertierungstool erstellen, dann sieht das allgemeine Layout wie folgt aus:
Das obige Bild stammt vollständig von Python It wird mit der integrierten GUI-Bibliothek tkinter geschrieben.
Ein Teil des Codes lautet wie folgt:
from tkinter import ttk from tkinter import * class Transform(): def __init__(self): self.root = Tk() self.root.title("进制转换工具") self.root.geometry("600x280") self.root.resizable(False, False) self.var = StringVar() self.values = ['2', '8', '10', '16', '32', '36', '58', '62'] self.myWidget() self.myLayout() def myWidget(self): self.container = Frame(self.root) # 转换设置区域 self.lf_group1 = LabelFrame(master=self.container, text="转换设置") self.cb = Checkbutton(self.lf_group1, text="是否自动转换") self.cb.invoke() self.bt = Button(self.lf_group1, text='转换') self.en = Entry(self.lf_group1, text='warning') # 进制选择区域 self.lf_group2 = LabelFrame(master=self.container, text="进制选择") self.lb1 = Label(self.lf_group2, text="请选择待转换的进制") self.cbo1 = ttk.Combobox( master=self.lf_group2, values=self.values ) self.cbo1.set(self.values[2]) self.lb2 = Label(self.lf_group2, text="请选择转换后的进制") self.cbo2 = ttk.Combobox( master=self.lf_group2, values=self.values, ) self.cbo2.set(self.values[0]) # 进制输出区域 self.txt = Text(master=self.container, height=5, width=50) def myLayout(self): self.container.pack(side=LEFT, fill=BOTH, expand=YES, padx=5) self.lf_group1.pack(fill=X, side=TOP) self.lf_group2.pack(fill=X, pady=10, side=TOP) self.cb.pack(side=LEFT, expand=YES, padx=5, fill=X) self.bt.pack(side=LEFT, expand=YES, padx=5, fill=X) self.en.pack(side=LEFT, expand=YES, padx=5, fill=X) self.lb1.pack(side=LEFT, expand=YES, padx=5) self.cbo1.pack(side=LEFT, expand=YES, pady=5) self.lb2.pack(side=LEFT, expand=YES, padx=5) self.cbo2.pack(side=LEFT, expand=YES, pady=5) self.txt.pack(side=LEFT, anchor=NW, pady=5, fill=BOTH, expand=YES) def run(self): self.container.mainloop() if __name__ == '__main__': trans = Transform() trans.run()
Der Code ist nicht kompliziert und das Layout ist auch die einfachste verwendete Packmethode. Obwohl das gesamte GUI-Programm ordentlich aussieht, sind die Farben eintönig und nicht jede Komponente sehr schön. Lass es uns als nächstes verschönern.
Seitenverschönerung
Wir verschönern zunächst die Seite, indem wir CSS manuell festlegen. Hier verwenden wir hauptsächlich das Config-Attribut der Tkonter-Bibliothek.
Zuerst legen wir die Hintergrundfarbe fest:
self.container.config(bg='#073642')
Für den gesamten Container-Container setzen wir die Hintergrundfarbe auf #073642
Dann legen wir die Stile jeder Komponente separat fest:
self.lf_group1.config(bg='#073642', fg="white") self.lf_group2.config(bg='#073642', fg="white") self.cb.config(bg='#073642', selectcolor='#073642', activebackground='#073642', activeforeground='#073642', fg="white") self.bt.config(bg="azure3") self.en.config(highlightbackground="#0b5162", highlightcolor="#0b5162", insertofftime=500, insertontime=500, fg="Gainsboro", insertbackground="Gainsboro", bg="#073642", highlightthickness=2, relief="solid") self.lb1.config(bg='#073642', activebackground='#073642', activeforeground='#073642', fg="white") self.lb2.config(bg='#073642', activebackground='#073642', activeforeground='#073642', fg="white") self.txt.config(insertofftime=500, insertontime=500, fg="Gainsboro", insertbackground="Gainsboro", wrap="none", bg='#073642')
Alle werden über die Konfiguration festgelegt. Für die Farbe kann die Auswahl über den Online-Farbwähler getroffen werden.
- https://tools.kalvinbg.cn/dev/colorPicker Als nächstes legen wir den Dropdown-Box-Stil fest. Es gibt einige Besonderheiten an der Dropdown-Box-Komponente.
Diese Komponente gehört zur ttk-Komponente, daher muss der Stil über das Thema festgelegt werden. Der Code lautet wie folgt:
combostyle = ttk.Style() combostyle.theme_create('combostyle', parent='alt', settings={'TCombobox': {'configure': { 'foreground': 'white', 'selectbackground': '#073642',# 选择后的背景颜色 'fieldbackground': '#073642',# 下拉框颜色 'background': '#073642',# 下拉按钮背景颜色 "font": 10,# 字体大小 }}} ) combostyle.theme_use('combostyle')
Auf diese Weise wird der Stil unseres gesamten GUI-Programms festgelegt Schauen Sie sich den Endeffekt an:
Es ist deutlich zu erkennen, dass das Erscheinungsbild um mehrere Ebenen verbessert wurde!
Verwenden Sie ttkbootstrap, um die Seite zu verschönern
Natürlich haben wir auch eine einfachere und effektivere Verschönerungsmethode, nämlich die Verwendung der ttkbootstrap-Bibliothek zum Verschönern der Seite.
Installieren Sie zuerst die ttkbootstrap-Bibliothek über pip:
pip install ttkbootstrap
Dann verweisen Sie auf die Bibliothek im Projekt:
import ttkbootstrap as ttk from ttkbootstrap.constants import * class MainCreator(ttk.Window): def __init__(self): super().__init__("进制转换工具", themename="solar", resizable=(False, False))# 设置一个主题
Zu diesem Zeitpunkt, wenn wir das Layout der Komponenten abgeschlossen haben, wird der Gesamtstil der Seite zum Stil von Natürlich können wir verschiedenen Komponenten immer noch Bootstyle-Attribute hinzufügen, um weitere Stileffekte zu erzielen.
def create_frame(self): """Create all the frame widgets""" container = ttk.Frame(self) container.pack(side=LEFT, fill=BOTH, expand=YES, padx=5) color_group = ttk.Labelframe( master=container, text="转换设置", padding=10 ) color_group.pack(fill=X, side=TOP) self.cb = ttk.Checkbutton(color_group, text="是否自动转换", variable=self.cbvar) self.cb.invoke() self.bt = ttk.Button(color_group, text='转换', bootstyle='success') self.en = ttk.Entry(color_group, text='warning', bootstyle='warning') self.cb.pack(side=LEFT, expand=YES, padx=5, fill=X) self.bt.pack(side=LEFT, expand=YES, padx=5, fill=X) self.en.pack(side=LEFT, expand=YES, padx=5, fill=X) cr_group = ttk.Labelframe( master=container, text="进制选择", padding=10 ) cr_group.pack(fill=X, pady=10, side=TOP) values = ['2', '8', '10', '16', '32', '36', '58', '62'] cr3 = ttk.Label(cr_group, text="请选择待转换的进制") cr3.pack(side=LEFT, expand=YES, padx=5) self.cbo1 = ttk.Combobox( master=cr_group, values=values, ) self.cbo1.pack(side=LEFT, expand=YES, pady=5) self.cbo1.set(values[2]) cr5 = ttk.Label(cr_group, text="请选择转换后的进制") cr5.pack(side=LEFT, expand=YES, padx=5) self.cbo2 = ttk.Combobox( master=cr_group, values=values, ) self.cbo2.pack(side=LEFT, expand=YES, pady=5) self.cbo2.set(values[0]) self.txt = ttk.Text(master=container, height=5, width=50, wrap="none") self.txt.pack(side=LEFT, anchor=NW, pady=5, fill=BOTH, expand=YES)
Der Endeffekt ist wie folgt:
Es ist ersichtlich, dass der Gesamteffekt der Verwendung dieser Bibliothek immer noch schöner und bequemer ist als das manuelle Hinzufügen von CSS-Stilen!
Okay, das ist alles, was ich heute geteilt habe, bis zum nächsten Mal~
Das obige ist der detaillierte Inhalt vonWer hat gesagt, dass das Schreiben von GUI-Programmen in Python hässlich ist? Das liegt daran, dass Sie nicht wissen, wie man es verschönert!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Was sind die Vor- und Nachteile des Templatings?

So laden Sie Deepseek Xiaomi herunter

Google AI kündigt Gemini 1.5 Pro und Gemma 2 für Entwickler an

Für nur 250 US-Dollar zeigt Ihnen der technische Leiter von Hugging Face Schritt für Schritt, wie Sie Llama 3 verfeinern

Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks

Eine vollständige Anleitung zum Debuggen und Analysieren von Golang-Funktionen

So speichern Sie die Evaluierungsfunktion
