首页 > 解决方案 > Tkinter PopUp 窗口未从 Entry 和 Combobox 中获取文本变量值

问题描述

我在 Python3 中使用 Tkinter 创建了一个 GUI,其中一个功能是单击按钮后弹出窗口。就是我的弹出窗口的样子。弹出窗口将接受用户输入并从类对象(self)中更新一个变量。一切正常,除了函数UpdateValues()中的部分,如下面的代码所示。

在弹出窗口中输入并更新频率(代码中的变量频率)和迭代(代码中的变量循环)值后,它们无法在终端上打印并出现空白屏幕。因此self.freqself.loop无法更新。

我是 python-classes 和 tkinter 的新手,现在一直在努力解决这个问题。任何帮助都感激不尽。谢谢!

代码:

'''Class and other attributes here'''    

# Blinking light ssh command
    self.freq = "500"
    self.loop = "10"
    def RunCode():
        cmd = "sshpass -p \"raspberry\" ssh -to StrictHostKeyChecking=no pi@pi ./led "+self.freq+" "+self.loop
        os.system(cmd)

    def PopUpBox1():
        popup = tk.Tk()
        popup.title("Edit Parameters")
        w = 325
        h = 75
        x = (ws/2) - w/2
        y = (hs/2) - h/2
        popup.geometry('%dx%d+%d+%d' % (w,h,x,y))
        popup.resizable(False,False)

        # Adding widgets to PopUpBox
        # Modified Button Click Function for Update
        def UpdateValues(): 
            update.configure(text='Updated')
            print(freq.get())
            print(loop.get())
            self.freq = str(freq.get())
            self.loop = str(loop.get())
            popup.destroy()

        # Frequency and Iterations label
        ttk.Label(popup, text="Frequency:",font='200').grid(column=0, row=0, padx=4, pady=4, sticky='w')
        ttk.Label(popup, text="Iterations:",font='200').grid(column=1, row=0, padx=4, pady=4, sticky='w')

        # Adding a Textbox Entry widget for frequency values
        freq = tk.StringVar()
        name_entered = tk.Entry(popup, width=12, textvariable=freq)
        name_entered.grid(column=0, row=1, padx=4, pady=4)

        # Adding a Combobox for iteration values
        loop = tk.StringVar()
        number_chosen = ttk.Combobox(popup, width=12, textvariable=loop)
        number_chosen['values'] = (1, 2, 4, 42, 100)
        number_chosen.grid(column=1, row=1, padx=4, pady=4)
        number_chosen.current(0)

        # Adding a Button for Updation
        update = ttk.Button(popup, text="Update", command = UpdateValues)
        update.grid(column=2, row=1, padx=4, pady=4)

        # Place cursor into name Entry
        name_entered.focus() 

标签: pythontkintertkinter-entry

解决方案


推荐阅读