繁体   English   中英

Tkinter:将simpledialog.askinteger放在顶层框中

[英]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来使用withdrawiconifydeiconify方法,如下所示:

...
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM