Python Tkinter:将simpledialog.askinteger放入顶层框中
在顶级小部件中使用simpledialog小部件时遇到问题。下面的代码摘录会产生一个空的弹出窗口(标题为“Blocked fields”)、第二个带有正确simpledialog的弹出窗口(工作正常)和主游戏窗口(代码中未显示) 我想去掉第二个过时的窗口,我认为这一定很简单,但我被卡住了(完全是python新手,如果你还不知道的话)。任何提示都非常感谢Python Tkinter:将simpledialog.askinteger放入顶层框中,python,tkinter,toplevel,simpledialog,Python,Tkinter,Toplevel,Simpledialog,在顶级小部件中使用simpledialog小部件时遇到问题。下面的代码摘录会产生一个空的弹出窗口(标题为“Blocked fields”)、第二个带有正确simpledialog的弹出窗口(工作正常)和主游戏窗口(代码中未显示) 我想去掉第二个过时的窗口,我认为这一定很简单,但我被卡住了(完全是python新手,如果你还不知道的话)。任何提示都非常感谢 import tkinter as tk from tkinter import simpledialog root = tk.Tk() ro
import tkinter as tk
from tkinter import simpledialog
root = tk.Tk()
root.geometry("580x400+300+200")
root.title("Pah Tum")
#Popup window
block_request_top = tk.Toplevel()
block_request_top.title("Blocked fields")
entry_block = simpledialog.askinteger("Blocked fields", \
"Please enter a number of fields to be blocked. Choose an \
uneven number between 5,13]", parent=block_request_top, minvalue=5, \
maxvalue=13)
针对此特定问题,实现此目标的最简单方法可能是使用
收回
、图标化
和去图标化
方法,方法是在它们之间创建条目块
,如下所示:
...
block_request_top.withdraw()
entry_block = simpledialog.askinteger("Blocked fields", \
"Please enter a number of fields to be blocked. Choose an \
uneven number between 5,13]", parent=block_request_top, minvalue=5, \
maxvalue=13)
block_request_top.iconify()
block_request_top.deiconify()
完整代码:
import tkinter as tk
from tkinter import simpledialog
root = tk.Tk()
root.geometry("580x400+300+200")
root.title("Pah Tum")
#Popup window
block_request_top = tk.Toplevel()
block_request_top.title("Blocked fields")
block_request_top.withdraw()
entry_block = simpledialog.askinteger("Blocked fields", \
"Please enter a number of fields to be blocked. Choose an \
uneven number between 5,13]", parent=block_request_top, minvalue=5, \
maxvalue=13)
block_request_top.iconify()
block_request_top.deiconify()
不过,我非常怀疑您最终是否会使用它。您根本不需要
Toplevel()
窗口askinteger()
是一个对话框,不需要容器小部件。只需跳过block\u request\u top窗口代码
import tkinter as tk
from tkinter import simpledialog
root = tk.Tk()
root.geometry("580x400+300+200")
root.title("Pah Tum")
# Popup window
#block_request_top = tk.Toplevel()
#block_request_top.title("Blocked fields")
entry_block = simpledialog.askinteger("Blocked fields",
"Please enter a number of fields to be blocked. Choose an \
uneven number between 5,13]", parent=root, minvalue=5, # parent changed...
maxvalue=13)
print('Okay, I will block %d fields.' % entry_block) # new, to see value
# set up the rest of your GUI
root.mainloop() # You need this for the GUI to remain alive.
父级的值更新为root,以反映顶级窗口的消失
最后还需要root.mainloop()调用,以保持GUI处于活动状态并运行。一旦您的程序到达这里,Tkinter系统实际上只是等待“事件”发生,比如用户单击按钮或键入字段。你仍然需要把所有这些和你必须画的所有按钮联系在一起。有一些人就同样的问题发帖。您根本不需要Toplevel()窗口。askinteger()是一个对话框,不需要容器小部件。跳过“请求”窗口,谢谢!我以为我以前试过,但显然我又犯了一个错误。。。现在它工作了!