gpt4 book ai didi

Python tkinter : Open only one instance at a time of secodary window from primary window

转载 作者:行者123 更新时间:2023-12-03 08:34:50 24 4
gpt4 key购买 nike

有两个窗口“主”和“辅助”,我想使用主窗口上的按钮小部件打开辅助窗口。但问题是,每当我按下该按钮时,辅助窗口就会打开,无论辅助窗口是否已打开,都无关紧要。

我不想要这种行为。我只想一次只允许一个辅助窗口实例。如果辅助窗口已经打开,则不应打开新的辅助窗口。

我如何实现这一目标?

下面给出一个简单的示例代码,可以更准确地描述问题。

from tkinter import *

##############################################################################################

# Function to open secondary window
def fctn_to_open_sec_win():
secondary_window()


# Secondary window
def secondary_window():
window = Tk()
window.title('Secondary window')
window.geometry('300x200')

Label(window, text='\n\nThis is the secondary window.\n\n'
'There should be only one instance of it at a time.').pack()

window.mainloop()


# Primary window
def primary_window():
window = Tk()
window.title('Primary window')
window.geometry('400x300')

Button(window, text='Open Secondary window', command=fctn_to_open_sec_win).pack(pady=(30, 0))

window.mainloop()

##############################################################################################

if __name__ == '__main__':
primary_window()

最佳答案

不要在代码中使用tk.Tk()两次,而是使用tk.Toplevel。使用标志来实现此目的,也可以使用 tkinter 的 Destroy 事件。

import tkinter as tk

ontop = False

def setflag(event):
global ontop
ontop = False

def top():
global ontop
if not ontop:
top = tk.Toplevel()
top.bind('<Destroy>', setflag)
ontop = True

root = tk.Tk()
b = tk.Button(root,command=top)
b.pack()

root.mainloop()

使用类,您可以避免全局语句,甚至可以更好地跟踪实例。

关于Python tkinter : Open only one instance at a time of secodary window from primary window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64192472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com