【问题标题】:Tkinter entry get/set issuesTkinter 条目获取/设置问题
【发布时间】:2021-06-29 22:32:24
【问题描述】:

我正在使用类实现我的第一个 Tkinter UI,但我的 Entry 的 getter 和 setter 遇到了一些问题。

当我试图读取“N”的值时,即self.nameVar.get(),它什么也不打印...

谁能指出我正确的方向?

非常感谢!

### Class PopUpScreen
class popUpScreen():
    def __init__(self, newContact=True):
        self.root2 = Tk()
        self.root2.title('New Contact')
        self.root2.resizable(False, False)
        self.newContact = newContact
        
        ### Var
        **self.nameVar = StringVar()**
        

        ### Widget
        # Entry
        self.entryFirstName = Entry(self.root2, **textvariable=self.nameVar**)
        
        # Button
        btnSave = ttk.Button(self.root2, text="Save", default="active", command=self.callbackSave).grid(row=9, column=3)
        
        ### Grid
        # Entry
        self.entryFirstName.grid(row=2, column=2, columnspan=2)
        
        # Loop
        self.root2.mainloop()

    def callbackSave(self):
        n = **self.nameVar.get()**
        print('N value: ', n)
        messagebox.showinfo( "Saving...", n))
        self.root2.destroy()
    
### End Popup Contact class

【问题讨论】:

  • 也许StringVar(master=self.root2)

标签: python class user-interface tkinter


【解决方案1】:

试试这个:

from tkinter import messagebox
from tkinter import ttk
import tkinter as tk


class PopUpScreen():
    def __init__(self, new_contact=True):
        self.root2 = tk.Tk()
        self.root2.title("New Contact")
        self.root2.resizable(False, False)
        self.new_contact = new_contact

        self.entry_first_name = tk.Entry(self.root2)
        self.btn_save = ttk.Button(self.root2, text="Save", default="active",
                                   command=self.callback_save)
        self.entry_first_name.grid(row=2, column=2, columnspan=2)
        self.btn_save.grid(row=9, column=3)

        self.root2.mainloop()

    def callback_save(self):
        n = self.entry_first_name.get()
        print("N value: ", n)
        messagebox.showinfo("Saving...", n)
        self.root2.destroy()


PopUpScreen()

如果您要使用条目,则不需要tkinter.StringVar,因为您有<tkinter.Entry>.get(),它会返回条目的所有内容。也永远不要使用variable = <tkinter Widget>(...).grid(...),因为variable 将始终为None,以获取更多信息,请阅读this

【讨论】:

  • 非常感谢!多亏了你,它现在可以工作了!
  • @RaphaelG ~ 如果正确回答了您的问题,请考虑将其标记为正确答案。点击here了解如何:D
  • 完成!感谢提示
猜你喜欢
  • 2021-06-07
  • 1970-01-01
  • 2013-01-02
  • 2012-10-31
  • 2021-01-05
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多