在Tkinter中更新条目和标签小部件

时间:2020-07-22 14:29:34

标签: python user-interface tkinter label

我已经定义了一个GUI类,该类创建带有两个条目的tkinter窗口。我希望每次用户覆盖条目并按Enter时,都会在后台执行一些操作。另外,我希望这些条目定期检查某些值并更新它们,以便用户可以查看它们是否已更改;在下面的示例中,我使用静态字典,但通常这些参数是从相机获取的并且可能会波动。

但是,我什至无法在标签上打印出正确的值。我不是tkinter专家,所以不胜感激

from tkinter import *

class GUI():
    
    
    def __init__(self, window, window_title,input_dict):

        self.window = window
        self.window.title(window_title)
        self.window.geometry('400x200')

        top_frame = Frame(self.window)
        top_frame.pack(side=TOP, pady=5)
        
        Label(top_frame, text="Frame rate (fps)").grid(row=0)
        Label(top_frame, text="Exposure time (ms)").grid(row=2)
        
        self.labeling=Label(top_frame, text="Result").grid(row=3)
        
        self.e1_var = StringVar() # or StringVar(top) 

        self.e1_var.set(str(round(input_dict['frameRate'])))
        
        self.e2_var = StringVar() # or StringVar(top) 
        # print(type(self.e2_var))

        self.e2_var.set(str(round(input_dict['Exp_time'])))

        self.fps_entry = Entry(top_frame,textvariable=self.e1_var)
        self.exptime_entry = Entry(top_frame,textvariable=self.e2_var)     
        self.fps_entry.bind("<Return>",self.my_tracer)
        self.exptime_entry.bind("<Return>",self.my_tracer)
        

        self.fps_entry.grid(row=0, column=1)
        self.exptime_entry.grid(row=2, column=1)
     
        self.window.mainloop()

    
    def my_tracer(self,event):
        
        val1=int(self.e1_var.get())
        val2=int(self.e2_var.get())
        
        self.labeling.configure(text=str(val1*val2))        
            
input_dict = {
        'frameRate':  50,
        'Exp_time':  5000}
    
video_object=GUI(Tk(),"Test",input_dict)

1 个答案:

答案 0 :(得分:2)

您的代码产生的错误是AttributeError: 'NoneType' object has no attribute 'configure',对吧?

看这行:

self.labeling=Label(top_frame, text="Result").grid(row=3)

self.labeling将是None,因为grid()返回None。将几何图形管理器“链接”到小部件的创建确实是一个坏习惯。更改为:

self.labeling=Label(top_frame, text="Result")
self.labeling.grid(row=3)

现在,当用户输入新值时,标签将更新。

相关问题