Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter:将simpledialog.askinteger放入顶层框中_Python_Tkinter_Toplevel_Simpledialog - Fatal编程技术网

Python Tkinter:将simpledialog.askinteger放入顶层框中

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

在顶级小部件中使用simpledialog小部件时遇到问题。下面的代码摘录会产生一个空的弹出窗口(标题为“Blocked fields”)、第二个带有正确simpledialog的弹出窗口(工作正常)和主游戏窗口(代码中未显示)

我想去掉第二个过时的窗口,我认为这一定很简单,但我被卡住了(完全是python新手,如果你还不知道的话)。任何提示都非常感谢

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()是一个对话框,不需要容器小部件。跳过“请求”窗口,谢谢!我以为我以前试过,但显然我又犯了一个错误。。。现在它工作了!