【发布时间】:2021-03-19 17:44:36
【问题描述】:
我有一个问题,我不知道为什么.. 此屏幕截图总结了所有需要的代码: Screenshot_Code
请不要找意义,我尽可能地修剪了代码,只是为了显示问题。
我的问题如下:
- 如果我运行 main.py
- 然后根据“ui_root.py”点击Button
- 然后在Entry-Field中输入一些文字,根据“create_user.py”点击Button
- 那么我的 print Statement 是空的,分别是 StringVar() 绑定不起作用
如果我直接运行“create_user.py”(取消注释 UiCreateUser()),那么我的 print-Statement 会准确打印我的 Entry-Widget 中的内容/文本。
为什么?我不明白,如果有人可以帮助我,我会很高兴..提前谢谢。
复制粘贴的代码(阅读用截图,可能比这个更好):
main.py
from ui_root import UiRoot
app = UiRoot()
app.mainloop()
ui_root.py
from tkinter import Tk, Button
from pixela_brain import PixelaBrain
class UiRoot(Tk):
def __init__(self):
super().__init__()
self.brain = PixelaBrain()
self.button = Button(self, text="Button", command=self.click)
self.button.pack()
def click(self):
self.brain.create_user()
pixela_brain.py
from popup_windows import create_user
import json
class PixelaBrain:
def __init__(self):
pass
def create_user(self):
self.new_user = create_user.UiCreateUser()
create_user.py
from tkinter import Tk, Entry, Button, StringVar
class UiCreateUser(Tk):
def __init__(self):
super().__init__()
# Entry
self.entry_var = StringVar()
self.entry = Entry(self, textvariable=self.entry_var)
self.entry.pack()
# Button
self.button = Button(self, text="Click", command=self.btn_click)
self.button.pack()
self.mainloop()
def btn_click(self):
print(self.entry_var.get())
# UiCreateUser()
【问题讨论】:
-
您正在创建多个
Tk的(子类)实例。每一个都是一个完全独立的环境,有自己的变量、图像等,其他任何实例都无法访问。您需要使用Toplevel()来创建额外的窗口。 -
但是我在 UiCreateUser 类中创建了 StringVar() 并且我在同一个类(对象、实例......)中访问它。所以我不尝试从另一个实例访问 StringVar() 。我很困惑:)
-
您没有在任何特定的
Tk实例中显式创建StringVar,因此会为您选择一个(我认为这是程序中创建的第一个)。包含代码的类与它完全无关。 -
尝试将
self.entry_var = StringVar()更改为self.entry_var = StringVar(master=self)
标签: python python-3.x tkinter tkinter-entry