python - 使用 .get() 从另一个类中提取 Tkinter 变量
问题描述
我正在编写一个 Tkinter 应用程序,它要求用户显示的部分存在于两个不同的类中,两者都是从另一个文件导入的。我需要获取一段用户输入并将其从一个类传递到另一个类。在下面的玩具示例中,用户应该键入一些my_entry_input
内容,以后该类PullVariable
应该访问该内容。
代码如下。我有一些想法,例如以某种方式使用全局变量或在原始类中创建一个函数来获取变量然后将它们传回。在所有情况下,我得到:
AttributeError:类型对象“应用程序”没有属性“my_entry”
我能想到的最佳解决方案是创建一个响应绑定的函数,然后.get()
将该函数传递给另一个类。我的感觉是 tkinter 不喜欢.get()
课间。
感谢社区的帮助。
主要的
from import_test1 import *
root=Tk()
ui = Application(root)
ui.hello_world()
ui.entry()
pv = PullVariable()
if __name__ == '__main__':
root.mainloop()
导入代码
from tkinter import *
from tkinter import ttk
class Application(Frame):
def __init__(self, parent, *args, **kwargs):
print('Application init')
Frame.__init__(self, parent, *args, **kwargs)
self.parent=parent
self.parent.grid()
def entry(self):
self.my_entry = StringVar(self.parent)
my_entry_input = Entry(self.parent, textvariable=self.my_entry,
width=16)
my_entry_input.bind('<FocusOut>', self.show_entry)
my_entry_input.grid(column=0, row=1)
self.show_label = Label(self.parent, text = '')
self.show_label.grid(column=0, row=2)
def hello_world(self):
print('hello world')
self.hw = Label(self.parent, text='Hello World!')
self.hw.grid(column=0, row=0)
def show_entry(self, event):
PullVariable(Application).find_entry()
class PullVariable:
def __init__(self, app):
self.app = app
print('Pull initiated')
def find_entry(self, event=None):
self.pulled_entry = self.app.my_entry.get()
self.app.show_label['text'] = self.pulled_entry
解决方案
my_entry
不是Application
类的属性,所以不能做Application.my_entry
,因为它是Application
类实例的属性,所以可以做Application().my_entry
。您可能可以添加 的实例Application
或my_entry
的__init__
方法PullVariable
。我会用前者。
# ...
class PullVariable:
def __init__(self, app): # add app here
self.pulled_entry = app.my_entry.get() # use app here
print(self.pulled_entry)
# and then
root=Tk()
ui = Application(root)
ui.hello_world()
ui.entry()
pv = PullVariable(ui) # supply PullVariable with instance of Application
推荐阅读
- python - 试图让 Discord 机器人在命令后做出响应
- python - 上传多个文件 Django
- javascript - React 组件没有被渲染
- html - swiper js 仅在导航栏上方时有效
- optimization - 在 drake 中使用 Snopt 解决轨迹优化失败,如何解决?
- c# - 在 Angular 8 中调用 ASP.NET Web API 不起作用
- macos - Rust、OpenSSL、solana-test-validator 库未加载问题
- assembly - x86-64 内存模型重新排序
- google-cloud-platform - Google CloudRun 自动跟踪导致缺少跨度
- python - 了解 Django (Python) 和数据库