【问题标题】:Tkinter: Put simpledialog.askinteger in a toplevel boxTkinter:将 simpledialog.askinteger 放在顶层框中
【发布时间】:2017-12-15 14:06:40
【问题描述】:

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

我想摆脱第二个过时的窗口,我认为这一定是一件简单的事情,但我被困住了(完整的 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)

【问题讨论】:

  • 您根本不需要 Toplevel() 窗口。 askinteger() 是一个对话框,不需要容器小部件。跳过 block_request_top 窗口即可。

标签: python tkinter toplevel simpledialog


【解决方案1】:

您根本不需要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 系统基本上只是等待“事件”发生,例如用户单击按钮或输入字段。您仍然必须将所有这些与您必须绘制的所有按钮联系在一起。有几个人发布了同样的问题。

【讨论】:

  • 谢谢!我以为我以前尝试过,但显然我又犯了另一个错误……现在它起作用了!
【解决方案2】:

解决这个特定问题的最简单方法可能是使用withdrawiconifydeiconify 方法,方法是在它们之间创建entry_block,如下所示:

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

我非常怀疑这就是你最终会使用的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2013-04-06
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2023-03-14
    相关资源
    最近更新 更多