按钮命令后标签配置未按预期工作

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