[英]Tkinter: Put simpledialog.askinteger in a toplevel box
我在顶级窗口小部件中使用simpledialog小部件时遇到麻烦。 下面的代码提取将导致一个空的弹出窗口(标题为“阻止的字段”),具有正确的简单对话框的第二个弹出窗口(也可以正常工作)和主游戏窗口(代码中未列出)。
我想摆脱第二个过时的窗口,我认为这肯定是一件简单的事情,但是我被卡住了(如果您还不能告诉我,请完整的python newbie)。 任何提示高度赞赏!
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)
您完全不需要Toplevel()
窗口。 askinteger()
是一个对话框,不需要容器小部件。 只需跳过block_request_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.
parent的值已更新为root,以反映Toplevel窗口消失。
最后,您还需要root.mainloop()调用,以保持GUI的活动和运行。 一旦您的程序到达此处,Tkinter系统实质上就是在等待“事件”的发生,例如用户单击按钮或在字段中键入内容。 您仍然必须将所有这些与必须绘制的所有按钮捆绑在一起。 有一些人发布有关此相同问题的信息。
对于这个特定问题,最简单的方法可能是通过在它们之间创建entry_block
来使用withdraw
, iconify
和deiconify
方法,如下所示:
...
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()
我非常怀疑这是您最终将要使用的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.