2014-05-10 63 views
1

我是相當新的節目,一般這樣的道歉任何愚蠢。配置獨立的小部件(Tkinter的TTK,Python)的

我做了這個節目用Python和Tkinter的,用於電子針對不同單位計算電容。該程序如下:

from tkinter import * 
from tkinter import ttk 

def calculate(*args): 
    try: 
     valuex=int(x.get()) 
     valuey=int(y.get()) 
     valuez=int(z.get()) 
     cappf.set(int(str(valuex)+str(valuey))*10**valuez) 
     capnf.set(int(str(valuex)+str(valuey))*10**valuez*10**-3) 
     capuf.set(int(str(valuex)+str(valuey))*10**valuez*10**-6) 
    except ValueError: 
     pass 

root=Tk() 
root.title('Capacitor Calculator') 
mainframe=ttk.Frame(root, padding='10 10 10 10') 
mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainframe.columnconfigure(0, weight=1) 
mainframe.rowconfigure(0, weight=1) 

x=StringVar() 
x_entry=ttk.Entry(mainframe, width=3, textvariable=x) 
x_entry.grid(column=1, row=2, sticky=(W,E)) 
y=StringVar() 
y_entry=ttk.Entry(mainframe, width=3, textvariable=y) 
y_entry.grid(column=1, row=3, sticky=(W,E)) 
z=StringVar() 
z_entry=ttk.Entry(mainframe, width=3, textvariable=z) 
z_entry.grid(column=1, row=4, sticky=(W,E)) 
cappf=StringVar() 
capnf=StringVar() 
capuf=StringVar() 

ttk.Button(mainframe, width=7, text='Calculate', command=calculate).grid(column=2, row=5, sticky=(N, E, W, S)) 
ttk.Label(mainframe, textvariable=cappf).grid(column=2, row=2, sticky=N) 
ttk.Label(mainframe, textvariable=capnf).grid(column=2, row=3, sticky=N) 
ttk.Label(mainframe, textvariable=capuf).grid(column=2, row=4, sticky=N) 
ttk.Label(mainframe, text='Input:').grid(column=1, row=1, sticky=N) 
ttk.Label(mainframe, text='Amount:').grid(column=2, row=1, sticky=N) 
ttk.Label(mainframe, text='Units:').grid(column=3, row=1, sticky=N) 
ttk.Label(mainframe, text='pf').grid(column=3, row=2, sticky=N) 
ttk.Label(mainframe, text='nf').grid(column=3, row=3, sticky=N) 
ttk.Label(mainframe, text='uf').grid(column=3, row=4, sticky=N) 
ttk.Button(mainframe, text='Quit', command=root.destroy).grid(column=2, row=6, sticky=(N, E, S, W)) 

ttk.Style().configure('TLabel', padding=6, font='Corbel 16', foreground='#0077AF') 
ttk.Style().configure("TButton", padding=6, relief="flat", font='Corbel 18', foreground='#00AA11') 

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=3) 
x_entry.focus() 
y_entry.focus() 
z_entry.focus() 
root.bind('<Return>', calculate) 

root.mainloop() 

在Py 3.4.0 shell中運行它,它工作正常。

我的問題是:我該怎麼做/它是如何使「退出」按鈕顯示紅色字體?眼下,「ttk.Style()」底部附近的效果部分的所有按鈕來配置他們以同樣的方式;我已經在網上看了,但我不能找到一個可行的解決方案,或者至少是我在申請正常。

感謝,

扎克

回答

3

你需要做兩件事情:

  1. 對於有​​選項設置爲紅色按鈕,創建一個新的tkinter.ttk.Style

  2. 將此按鈕的style選項指定爲此樣式。

下面是腳本的一個固定的版本:

from tkinter import * 
from tkinter import ttk 

def calculate(*args): 
    try: 
     valuex=int(x.get()) 
     valuey=int(y.get()) 
     valuez=int(z.get()) 
     cappf.set(int(str(valuex)+str(valuey))*10**valuez) 
     capnf.set(int(str(valuex)+str(valuey))*10**valuez*10**-3) 
     capuf.set(int(str(valuex)+str(valuey))*10**valuez*10**-6) 
    except ValueError: 
     pass 

root=Tk() 
root.title('Capacitor Calculator') 
mainframe=ttk.Frame(root, padding='10 10 10 10') 
mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainframe.columnconfigure(0, weight=1) 
mainframe.rowconfigure(0, weight=1) 

x=StringVar() 
x_entry=ttk.Entry(mainframe, width=3, textvariable=x) 
x_entry.grid(column=1, row=2, sticky=(W,E)) 
y=StringVar() 
y_entry=ttk.Entry(mainframe, width=3, textvariable=y) 
y_entry.grid(column=1, row=3, sticky=(W,E)) 
z=StringVar() 
z_entry=ttk.Entry(mainframe, width=3, textvariable=z) 
z_entry.grid(column=1, row=4, sticky=(W,E)) 
cappf=StringVar() 
capnf=StringVar() 
capuf=StringVar() 

ttk.Button(mainframe, width=7, text='Calculate', command=calculate).grid(column=2, row=5, sticky=(N, E, W, S)) 
ttk.Label(mainframe, textvariable=cappf).grid(column=2, row=2, sticky=N) 
ttk.Label(mainframe, textvariable=capnf).grid(column=2, row=3, sticky=N) 
ttk.Label(mainframe, textvariable=capuf).grid(column=2, row=4, sticky=N) 
ttk.Label(mainframe, text='Input:').grid(column=1, row=1, sticky=N) 
ttk.Label(mainframe, text='Amount:').grid(column=2, row=1, sticky=N) 
ttk.Label(mainframe, text='Units:').grid(column=3, row=1, sticky=N) 
ttk.Label(mainframe, text='pf').grid(column=3, row=2, sticky=N) 
ttk.Label(mainframe, text='nf').grid(column=3, row=3, sticky=N) 
ttk.Label(mainframe, text='uf').grid(column=3, row=4, sticky=N) 
########################################################################################################################## 
ttk.Button(mainframe, text='Quit', style='red.TButton', command=root.destroy).grid(column=2, row=6, sticky=(N, E, S, W)) 

ttk.Style().configure('red.TButton', foreground='red', padding=6, font='Corbel 16') 
########################################################################################################################## 
ttk.Style().configure('TLabel', padding=6, font='Corbel 16', foreground='#0077AF') 
ttk.Style().configure("TButton", padding=6, relief="flat", font='Corbel 18', foreground='#00AA11') 

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=3) 
x_entry.focus() 
y_entry.focus() 
z_entry.focus() 
root.bind('<Return>', calculate) 

root.mainloop() 

我改變了的東西是在評論欄中。

+0

謝謝!這真的有幫助,現在我可以看到它是如何工作的,這真的幫助我掌握編程。 – ZG1997