【问题标题】:Can't read entry value from one class's instance to another in Tkinter while reading from the same class's init works fine无法在 Tkinter 中从一个类的实例读取条目值到另一个,同时从同一个类的 init 读取工作正常
【发布时间】:2018-03-15 13:24:32
【问题描述】:

我的项目中有两个课程。一个是 GUI,另一个是计算。我从第一个输入框中读取数据,并希望将它们传递给第二个。到目前为止,我所做的是:

class OptimizationGUI:
    land_entry = 0
    pop_entry = 0

    def __init__(self, master):
        self.land_entry_text = IntVar()
        self.pop_entry_text = IntVar()

        self.master = master

        OptimizationGUI.land_entry = Entry(master, textvariable=self.land_entry_text)

        self.advanced_options = Button(master, text="Advanced", command=self.advanced)

        self.run = Button(master, text="RUN", command=self.start, bg='black', fg='red', bd=4)


    def advanced(self):
        advanced_window = Toplevel()
        OptimizationGUI.pop_entry = Entry(advanced_window, textvariable=self.pop_entry_text)

    def start(self):
        opt = Optimization()
        method = getattr(opt,'get_result')
        yo = method()

在上面的代码中,我将两者作为类变量初始化,然后创建条目。我使用 getattr 从类 OptimizationGui 转到另一个类。其他类的代码如下:

class Optimization():

    def __init__(self):
        self.population = OptimizationGUI.pop_entry.get()
        self.land = OptimizationGUI.land_entry.get()
        print self.population, self.land

奇怪的是,当它正确打印land_entry 的数据时,当它到达self.population = OptimizationGUI.pop_entry.get() 行时,它会打印以下错误:

AttributeError: 'int' 对象没有属性 'get'

我看到这两者之间的唯一区别是 pop_entry 变量不在 init 函数中,而是在“高级”函数中。有什么办法可以克服?

【问题讨论】:

    标签: python tkinter tkinter-entry class-variables getattr


    【解决方案1】:

    init内部调用advanced方法:

    def __init__(self, master):
        ...
        self.advanced()
    

    不同之处在于类变量整数0land_entryEntry 对象覆盖,而pop_entry 不会被覆盖,因为advanced 是覆盖它的部分并且它永远不会被调用。

    【讨论】:

    • 确实修复了它。但是,现在当我运行程序时,“高级”窗口会弹出,而无需我单击高级按钮。此外,有时我会在同一行收到此错误: return self.tk.call(self._w, 'get') TclError: invalid command name
    • @tzoukritzou 然后,请确保在 advanced 方法被调用后的某个时间实例化 Optimization 对象。更独立地,确保仅在 它是具有方法 (Entry) 的对象之后调用.get()
    • @tzoukritzou 我认为你需要准备一个更好的算法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多