使用.get()从另一个类中提取Tkinter变量

时间:2019-04-07 13:02:51

标签: python tkinter

我正在编写一个Tkinter应用程序,该程序要求用户显示的某些部分存在于两个不同的类中,这两个类均从另一个文件导入。我需要接受一部分用户输入,并将其从一个类传递到另一个类。在下面的玩具示例中,用户应该在my_entry_input中键入一些内容,随后该类PullVariable应该可以访问。

代码在下面。我有一些想法,例如以某种方式使用全局变量或在原始类中创建函数以获取变量,然后将其传递回去。在所有情况下,我都会得到:

  

AttributeError:类型对象“ Application”没有属性“ 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

1 个答案:

答案 0 :(得分:0)

my_entry不是Application类的属性,所以您不能做Application.my_entry,因为它是Application类的实例的属性,因此您可以做Application().my_entry。您可以将Applicationmy_entry的一个实例添加到__init__的{​​{1}}方法中。我将使用前者。

PullVariable