简体   繁体   English

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

[英]Configuring independent widgets (Tkinter ttk, Python)

I'm fairly new to programming in general so apologies for any stupidity. 我对编程很新,所以对任何愚蠢道歉。

I've made this program with python and Tkinter, for calculating capacitors in electronics for different units. 我用python和Tkinter制作了这个程序,用于计算不同单位的电子电容器。 The program is as follows: 该计划如下:

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()

Running it in the Py 3.4.0 shell, it works fine as it is. 在Py 3.4.0 shell中运行它,它可以正常工作。

My question is: What do I do/how do it make it so that the 'quit' button displays red font? 我的问题是:我该怎么做/怎么做才能让“退出”按钮显示红色字体? Right now, the 'ttk.Style()' section near the bottom effects all buttons to configure them in the same way; 现在,靠近底部的'ttk.Style()'部分会影响所有按钮以相同的方式配置它们; i've looked online but I can't find a solution that works, or at least that i'm applying properly. 我看过网上但我找不到有效的解决方案,或者至少我正确应用。

Thanks, 谢谢,

Zach 扎克

You need to do two things: 你需要做两件事:

  1. Create a new tkinter.ttk.Style for the button that has its foreground option set to red. foreground选项设置为红色的按钮创建一个新的tkinter.ttk.Style

  2. Assign the button's style option to this style. 将按钮的style选项指定为此样式。

Below is a fixed version of your script: 以下是您脚本的固定版本:

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()

The stuff I changed is in the comment box. 我更改的内容在评论框中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM