python - Python类之间如何通信?

标签 python python-3.x tkinter calculator

我正在尝试基于 tkinter 构建计算器。我也遵循 there 的提示。 计划肯定还在进行中。由于这个错误,我目前被卡住了:

AttributeError: 'Calculator_GUI' object has no attribute 'main'

我不知道如何在两个类之间进行工作交流。我还要求对已经完成的工作进行简短审查。提前致谢! 这是代码:

import tkinter as tk
from tkinter import ttk

class Calculator_Core():
    def __init__(self):
        self.input = tk.StringVar()

    def buttonClick(self, a):
        self.input.set(a)
        #DEBUG:
        print(self.input)


class Calculator_GUI(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.master = master
        self.button = {}
        self.configure_gui()
        self.create_widgets()
        self.main = Calculator_Core()

    def configure_gui(self):
        self.master.title("Calculator")
        self.master.resizable(False, False)

    def create_widgets(self):
        self.configure_input_space()
        row_number = 1
        column_number = 0
        a = -1
        text_buttons = ('789+', '456-', '123*', '0=/C')
        for button_row in text_buttons:
            for text_button in button_row:
                a += 1
                self.configure_button(text_button, row_number, column_number, a)
                column_number += 1
            row_number += 1
            column_number = 0

    def configure_button(self, text, row, column, key):
        self.button[key] = ttk.Button(self.master, text=text,
                                  command=lambda: self.main.buttonClick(text))
        self.button[key].grid(row=row, column=column)

    def configure_input_space(self):
        self.entry = ttk.Entry(self.master, textvariable=self.main.input)
        self.entry.grid(columnspan=4, sticky='we')


if __name__ == "__main__":
    root = tk.Tk()
    Calculator_GUI(root)
    root.mainloop()

最佳答案

在运行 create_widgets() 函数之前,您需要“创建”self.main,因此:

class Calculator_GUI(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.master = master
        self.button = {}
        self.configure_gui()
        self.create_widgets()
        self.main = Calculator_Core()

应该是这样的:

class Calculator_GUI(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.master = master
        self.main = Calculator_Core()
        self.button = {}
        self.configure_gui()
        self.create_widgets()

因为 create_widgets() 函数运行 configure_button()configure_input_space() 函数,它们引用了 self.main

关于python - Python类之间如何通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52074995/

相关文章:

python - 如何调用存储在变量中的方法?

python - 决定 Python 代码是 v2 还是 v3 需要注意什么

python - 使用python在html源代码中查找图像

python - 使用 Python 从 YouTube 播放音频的最快方法

python - pandas 查找多行中特定列中的最小值

python - 如何找到文本特征并打印它们?

python - 在 Python 上对不同深度的列表子列表进行排列,同时保持它们独立

python - 如何更新 python tkinter 窗口

Python 3 - tkinter 更改页面传递额外参数

image - tkinter 按钮不显示图像