配置独立小部件(Tkinter ttk、Python)

配置独立小部件(Tkinter ttk、Python),python,user-interface,tkinter,widget,ttk,Python,User Interface,Tkinter,Widget,Ttk,总的来说,我对编程相当陌生,所以为我的愚蠢行为道歉 我用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.

总的来说,我对编程相当陌生,所以为我的愚蠢行为道歉

我用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()
从tkinter导入*
从tkinter导入ttk
def计算(*args):
尝试:
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)
除值错误外:
通过
root=Tk()
root.title('电容器计算器')
mainframe=ttk.Frame(根,padding='10')
grid(列=0,行=0,粘性=(N,W,E,S))
mainframe.columnconfigure(0,权重=1)
mainframe.rowconfigure(0,权重=1)
x=StringVar()
x_entry=ttk.entry(大型机,宽度=3,文本变量=x)
x_entry.grid(列=1,行=2,粘性=(W,E))
y=StringVar()
y_entry=ttk.entry(大型机,宽度=3,文本变量=y)
y_entry.grid(列=1,行=3,粘性=(W,E))
z=StringVar()
z_entry=ttk.entry(大型机,宽度=3,文本变量=z)
网格(列=1,行=4,粘性=(W,E))
cappf=StringVar()
capnf=StringVar()
capuf=StringVar()
ttk.按钮(大型机,宽度=7,text='Calculate',command=Calculate).grid(列=2,行=5,粘性=(N,E,W,S))
标签(大型机,textvariable=cappf).grid(列=2,行=2,粘性=N)
标签(大型机,textvariable=capnf).grid(列=2,行=3,粘性=N)
标签(大型机,textvariable=capuf).grid(列=2,行=4,粘性=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)
按钮(大型机,text='Quit',command=root.destroy).grid(列=2,行=6,粘性=(N,E,S,W))
ttk.Style().configure('TLabel',padding=6,font='Corbel 16',前台='#0077AF')
ttk.Style().configure(“TButton”,padding=6,relief=“flat”,font='Corbel 18',前台='#00AA11')
对于mainframe.winfo_children():child.grid_配置(padx=5,pady=3)
x_entry.focus()
y_entry.focus()
z_entry.focus()
root.bind(“”,计算)
root.mainloop()
在Py 3.4.0 shell中运行它,它可以正常工作

我的问题是:我该怎么做/如何使“退出”按钮显示红色字体?现在,底部附近的“ttk.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()
    
    从tkinter导入*
    从tkinter导入ttk
    def计算(*args):
    尝试:
    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)
    除值错误外:
    通过
    root=Tk()
    root.title('电容器计算器')
    mainframe=ttk.Frame(根,padding='10')
    grid(列=0,行=0,粘性=(N,W,E,S))
    mainframe.columnconfigure(0,权重=1)
    mainframe.rowconfigure(0,权重=1)
    x=StringVar()
    x_entry=ttk.entry(大型机,宽度=3,文本变量=x)
    x_entry.grid(列=1,行=2,粘性=(W,E))
    y=StringVar()
    y_entry=ttk.entry(大型机,宽度=3,文本变量=y)
    y_entry.grid(列=1,行=3,粘性=(W,E))
    z=StringVar()
    z_entry=ttk.entry(大型机,宽度=3,文本变量=z)
    网格(列=1,行=4,粘性=(W,E))
    cappf=StringVar()
    capnf=StringVar()
    capuf=StringVar()
    ttk.按钮(大型机,宽度=7,text='Calculate',command=Calculate).grid(列=2,行=5,粘性=(N,E,W,S))
    标签(大型机,textvariable=cappf).grid(列=2,行=2,粘性=N)
    标签(大型机,textvariable=capnf).grid(列=2,行=3,粘性=N)
    标签(大型机,textvariable=capuf).grid(列=2,行=4,粘性=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)
    ##########################################################################################################################
    按钮(大型机,text='Quit',style='red.TButton',command=root.destroy).grid(列=2,行=6,粘性=(N,E,S,W))
    ttk.Style().configure('red.TButton',front='red',padding=6,font='Corbel 16')
    ##########################################################################################################################
    ttk.Style().configure('TLabel',padding=6,font='Corbel 16',前台='#0077AF')
    ttk.Style().configure(“TButton”,padding=6,relief=“flat”,font='Corbel 18',前台='#00AA11')
    对于mainframe.winfo_children():child.grid_配置(padx=5,pady=3)
    x_entry.focus()
    y_entry.focus()
    z_entry.focus()
    root.bind(“”,计算)
    root.mainloop()
    

    我更改的内容在评论框中。

    谢谢!这真的很有帮助,现在我可以看到它是如何工作的,这真的帮助我掌握编程。