按钮命令后标签配置未按预期工作
Label configure is not working as intended, after button command
我正在开发一个 GUI,它允许用户从下拉列表中 select 一个项目,获取该项目并在代码的其他地方使用它。这不是很好用。
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()
我希望 clickedDUT()
在单击“确定”后使用从组合框列表选项中获得的 SelectedDUT.get()
中的值进行更新。
您的代码中有两个小部分是错误的。第一个是如何为 Combobox
设置 textvariable
。您应该直接传递变量而不是 get
方法:
def selectDUT(self):
self.SelectedDUT = StringVar()
self.SelectDeviceUnderTest = ttk.Combobox(self, width=30, textvariable=self.SelectedDUT)
...
第二个是一个常见的错误,您执行命令 self.clickedDUT
而不是在 self.buttonDUT
中传递引用。更改为:
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")
我正在开发一个 GUI,它允许用户从下拉列表中 select 一个项目,获取该项目并在代码的其他地方使用它。这不是很好用。
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()
我希望 clickedDUT()
在单击“确定”后使用从组合框列表选项中获得的 SelectedDUT.get()
中的值进行更新。
您的代码中有两个小部分是错误的。第一个是如何为 Combobox
设置 textvariable
。您应该直接传递变量而不是 get
方法:
def selectDUT(self):
self.SelectedDUT = StringVar()
self.SelectDeviceUnderTest = ttk.Combobox(self, width=30, textvariable=self.SelectedDUT)
...
第二个是一个常见的错误,您执行命令 self.clickedDUT
而不是在 self.buttonDUT
中传递引用。更改为:
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")