为什么四个按钮不显示?

时间:2019-12-27 15:35:43

标签: python button tkinter graphics

import Firebase
import Combine

class SessionStore: ObservableObject {
    var didChange = PassthroughSubject<SessionStore, Never>()
    @Published var session: User? {didSet {self.didChange.send(self) }}
    var handle: AuthStateDidChangeListenerHandle?

    func listen() {
        handle = Auth.auth().addStateDidChangeListener({ (auth, user) in
            if let user = user {
                self.session = User(uid: user.uid, email: user.email)
            } else {
                self.session = nil
            }
        })
    }

    func signUp(email: String, password: String, handler: @escaping AuthDataResultCallback) {
        Auth.auth().createUser(withEmail: email, password: password, completion: handler)
    }

    func signIn(email: String, password: String, handler: @escaping AuthDataResultCallback) {
        Auth.auth().signIn(withEmail: email, password: password, completion: handler)
    }

    func signOut() {
        do {
            try Auth.auth().signOut()
            self.session = nil
        } catch {
            print("Error signing out")
        }
    }


    func unbind() {
        if let handle = handle {
            Auth.auth().removeStateDidChangeListener(handle)
        }
    }

    deinit {
        unbind()
    }
}
struct User {
    var uid: String
    var email: String?

    init(uid: String, email: String?) {
        self.uid = uid
        self.email = email
    }
}
    ```

窗口和画布先前已经创建并且可以正常工作。 有人可以告诉我为什么我运行该程序时窗口什么都没显示吗? 谢谢

1 个答案:

答案 0 :(得分:1)

您似乎没有在按钮实例上调用Buttons.display_button方法。除非您这样做,否则您什么也看不到。

从编写代码的方式来看,canvas似乎是全局tk.Canvas对象。每当您调用Buttons.display_button时,您也会同时调用canvas.place,这是canvas.pack的替代方法-确定要执行此操作吗?因为,这似乎不正确。

我将从更简单的东西(可行的东西)开始,然后从那里开始。还有其他一些建议:我不认为Buttons是该类的好名字,因为该类的实例应该代表一个按钮-我认为Button是一个更好的名字。 / p>

此外,方法名称display_button有点多余。我们已经知道,该方法由于是Button类的一部分而“显示”按钮-我将其称为displayrender之类。

import tkinter as tk

root = tk.Tk()

canvas = tk.Canvas(root, width=200, height=200)
canvas.pack()

class Button:

    def __init__(self, *args, **kwargs):
        self.args = args
        self.kwargs = kwargs

    def render(self):
        canvas.create_oval(*self.args, **self.kwargs)

button = Button(50, 50, 150, 150, fill="grey")
button.render()

root.mainloop()