簡體   English   中英

如何使 tkinter 按鈕僅打開一個頂層?

[英]How to make a tkinter button open only one Toplevel?

我需要一個 tkinter 按鈕來僅打開一個 Toplevel,但我嘗試使用一個計數器在創建一個 Toplevel 時更改為 2,並使用一個 if 循環檢查計數器是否為 1,(如果為 1,它將創建一個 Toplevel window)

但是當我運行程序時,我可以通過多次單擊按鈕來制作許多 windows

我認為使用計數器的解決方案不起作用

    def menu_window(self): # this is in a class

    self.frame4 = tk.Frame(self.master, padx=30, pady=30)
    self.frame4.grid()

    Counter = 1  ### COUNTER 
    button2 = tk.Button(self.frame4, text="Review your Quiz", command=lambda: PreviewQuiz(self.master, self.frame4,
                                                                                          Counter))
    button2.grid(row=3, column=2, padx=40, pady=15, ipadx=28)
    button3 = tk.Button(self.frame4, text=" Start your Quiz ")
    button3.grid(row=4, column=2, padx=40, pady=5, ipadx=30)


class PreviewQuiz:
    def __init__(self, master, frame4, Counter):
        if Counter == 1:   # CHECK IF COUNTER IS 1
            self.master = master
            self.review_q = tk.Toplevel(self.master)
            self.frame5 = tk.Frame(self.master, padx=50, pady=20)
            self.frame5.grid()
            self.Counter = 2  # SET COUNTER TO 2

只需在用戶單擊按鈕時禁用該按鈕,並僅在頂級關閉時啟用它。

下面是取自您在最新帖子中提供的代碼的示例:

import tkinter as tk

class Run:
    def __init__(self, master):

        self.master = master
        
        self.button = tk.Button(master, text="TopLevel", command=self.make_new)
        self.button.pack()

    def make_new(self):
        self.button['state'] = 'disabled'

        new = tk.Toplevel(self.master)

        lbl = tk.Label(new, text='only one topLevel')
        lbl.pack()

        new.protocol("WM_DELETE_WINDOW", lambda : self.button.configure(state='normal') or new.destroy()) # or make a method to change the state
        

master1 = tk.Tk()
i = Run(master1)
master1.mainloop()

您的代碼無法運行,這使得調試變得困難。 不過有幾點:

當您在menu_window()中為counter分配一個值時,您會以“.”結束該值,這使其成為浮點數,而不是 integer。

您使用 counter 參數調用PreviewQuiz ,但是當您更新計數器時,您會將其更改為PreviewQuiz的實例變量,而不是menu_window() class 的實例變量,因此下次調用PreviewQuiz時,您仍將使用 1.0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM