显示 MessageBox 时出现 Python 新 TKinter 窗口 [英] Python New TKinter Window Appears when MessageBox is Shown
问题描述
显示消息框时,总会弹出一个新的 Tkinter 窗口.为什么会发生这种情况?我没有创建一个新窗口.如何摆脱窗口?
When displaying a messagebox, a new Tkinter window always pops up. Why does this happen? I didn't create a new window. How do I get rid of the window?
下面是我的代码:
def buy_product():
global listbox, buy_product_price_entry
global s, ip,port, address,owners_ip, owners_port, username
address = (ip,int(port))
try:
item = listbox.get(listbox.curselection())
price = int(buy_product_price_entry.get())
highest_bid = int(item[5].replace('HIGHEST BID PRICE:', ''))
K = item[0].replace('START:', '')
end_time_str = item[1].replace('END:', '')
L = datetime.strptime(end_time_str , '%H:%M:%S')
current_time = datetime.strptime(datetime.now().strftime('%H:%M:%S'), '%H:%M:%S')
if(price>highest_bid):
if(current_time <= L):
try:
A = int(item[2].replace('PRODUCT ID:', ''))
B = item[3].replace('PRODUCT NAME:','')
C = int(item[4].replace('BASE PRICE:', ''))
D = int(buy_product_price_entry.get())
E = username
F = item[7].replace('SELLER:','')
G = item[8].replace('SELLER IP:','')
H = int(item[9].replace('SELLER PORT:', ''))
I = owners_ip
J = owners_port
tup = (A,B,C,D,E,F,G,H,I,J,K,end_time_str)
s.sendto(str.encode(":::BUY_PRODUCT:::" + json.dumps(tup)), address)
buy_product_price_entry.delete(0, END)
except:
print("Unable to buy the product. Please try again.")
else:
messagebox.showinfo("Information", "Its now " + current_time.strftime('%H:%M:%S') + ", bidding time is over. " + item[6].replace('BIDDER:', '') + " has won the bidding")
else:
messagebox.showinfo("Information", "Inputted price is not greater than the highest bid price.")
except:
messagebox.showinfo("Incomplete Input", "Please select first a product.") #Why does extra window occur?
当我退出 Tk 窗口时,消息框也消失了,但是当我退出消息框时,窗口仍然存在.我必须手动关闭它.Tk 窗口似乎是消息框的父级.
When I exit the Tk window, the messagebox also disappears but when I exit the messagebox, the window remains. I have to close it manually. It seems like the Tk window is a parent of the messagebox.
推荐答案
当你创建一个消息框时,除非已经有一个窗口,否则它会自动创建一个.为了解决这个问题,你可以在主窗口上使用 .withdraw()
来隐藏它,比如
When you create a messagebox, unless there is a window already, it creates one automatically. To get around this, you can use .withdraw()
on your master window to hide it, something like
from tkinter import *
from tkinter import messagebox
master = Tk()
master.withdraw()
messagebox.showinfo("Hi", "Hello World")
这篇关于显示 MessageBox 时出现 Python 新 TKinter 窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!