Tkinter 按钮命令后,标签配置未按预期工作
我正在开发一个GUI,它允许用户从下拉列表中选择一个项目,获取该项目并在代码中的其他地方使用它。这不太管用Tkinter 按钮命令后,标签配置未按预期工作,tkinter,combobox,python-3.6,ttk,Tkinter,Combobox,Python 3.6,Ttk,我正在开发一个GUI,它允许用户从下拉列表中选择一个项目,获取该项目并在代码中的其他地方使用它。这不太管用 from tkinter import * from tkinter import ttk class Root(Tk): def __init__(self): super(Root, self).__init__() self.title("Vibration Certificate Generator") self.minsi
from tkinter import *
from tkinter import ttk
class Root(Tk):
def __init__(self):
super(Root, self).__init__()
self.title("Vibration Certificate Generator")
self.minsize(640, 400)
#self.wm_iconbitmap('icon.ico')
self.AddMenu()
self.selectDUT()
def AddMenu(self):
self.dropMenu = Menu()
self.config(menu=self.dropMenu)
self.fileMenu = Menu(self.dropMenu, tearoff=0) #file drop down menu
self.dropMenu.add_cascade(label="File", menu=self.fileMenu)
self.fileMenu.add_command(label="New Project...",
command=self.doNothing)
self.fileMenu.add_command(label="Now...", command=self.doNothing)
self.fileMenu.add_separator() #adds line
self.fileMenu.add_command(label="Exit", command=self.doNothing)
self.editMenu = Menu(self.dropMenu, tearoff=0) #edit drop down menu
self.dropMenu.add_cascade(label="Edit", menu=self.editMenu)
self.editMenu.add_command(label="Undo", command=self.doNothing)
self.editMenu.add_command(label="Redo", command=self.doNothing)
self.editMenu.add_separator() #adds line
self.editMenu.add_command(label="Cut", command=self.doNothing)
self.editMenu.add_command(label="Copy", command=self.doNothing)
self.editMenu.add_command(label="Paste", command=self.doNothing)
self.editMenu.add_command(label="Select All", command=self.doNothing)
#self.statusBar = ttk.Label(self, text="Generating a certificate for...")
self.statusBar = ttk.Label(self, text="Generating a certificate for...")
self.statusBar.grid(column=0,row=4)
def clickedDUT(self):
self.statusBar.configure(text="You Have Selected " + self.SelectedDUT.get())
print(self.SelectedDUT.get())
def doNothing(self):
print("ok ok i won't...")
def selectDUT(self):
self.SelectedDUT = StringVar()
#print(self.SelectedDUT.get())
self.SelectDeviceUnderTest = ttk.Combobox(self, width=30, textvariable=self.SelectedDUT.get())
self.SelectDeviceUnderTest['values'] = ("ACCELEROMETER", "VELOCITY TRANSDUCER",
"IMPEDANCE HEAD", "CONDTIONING AMPLIFIER", "VIBRATION ANALYSER",
"VIBRATION METER", "TRIAXIAL ACCELEROMETER")
self.SelectDeviceUnderTest.grid(column=1, row=0)
self.SelectDeviceUnderTest.current(0)
self.label = ttk.Label(self, text="Select your DUT:")
self.label.grid(column=0, row=0)
self.buttonDUT = ttk.Button(self, text="OK", command=self.clickedDUT())
self.buttonDUT.grid(column=2,row=0)
root = Root()
root.mainloop()
单击“确定”后,我希望使用从组合框列表选项获得的
SelectedDUT.get()
值更新clickedDUT()
。代码中有两个小部分出错。第一个是如何为组合框设置文本变量。您应该直接传递变量,而不是get
方法:
def selectDUT(self):
self.SelectedDUT = StringVar()
self.SelectDeviceUnderTest = ttk.Combobox(self, width=30, textvariable=self.SelectedDUT)
...
第二个错误是您执行命令self.clickedDUT
,而不是在self.butndut
中传递引用。更改为:
self.buttonDUT = ttk.Button(self, text="OK", command=self.clickedDUT) #drop the trailing ()
如果希望self.statusBar
显示在底部,则必须为每行设置权重:
def AddMenu(self):
...
for i in range(1,10):
self.grid_rowconfigure(i, weight=1)
self.statusBar = ttk.Label(self, text="Generating a certificate for...")
self.statusBar.grid(column=0,row=10,columnspan=2,sticky="w")
谢谢@giser_yugang,我还是新来的,我正在学习。谢谢@Henry Yik,这解决了问题。我是Python新手,我仍在努力找到自己的方法。我最不想做的事情是将statusBar标签放在网格的底部(最后一行)。有什么想法吗?可以说,这不是构造GUI的最佳方式,因为在这两者之间会留下很多空白。但是是的,这是可行的。