Heim > Artikel > Backend-Entwicklung > 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!
Bei 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!
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.
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.
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!
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!