【问题标题】:Python messagebox programPython消息框程序
【发布时间】:2020-09-22 21:27:27
【问题描述】:

我需要一些帮助..

我想制作一个使用 tkinter 来显示消息框的 python 程序。当消息框关闭一次时,我想让 2 个框出现。如果 2 个盒子被关闭,我希望出现 4 个盒子,依此类推...

我得到了第一个出现的消息框。如果您关闭它,for 循环 将启动并激活打开新消息框的功能。遗憾的是,它一次只能打开 1 个,因为我真的不知道如何同时多次激活一个功能。

这是我的代码:

import tkinter as tk
from tkinter import messagebox

root = tk.Tk()
x = 5

def open():
    messagebox.showwarning("Dragons..", "Cut off 1 head of the dragon and 2 more will appear..")

def on_closing():
    if messagebox.showwarning("Dragons..", "Cut off 1 head of the dragon and 2 more will appear.."):
        for i in range(x):
            open()
        else:
            root.destroy()

on_closing()

谁能给我一个正确的方向?

亲切的问候,

时尚

【问题讨论】:

  • 我认为在给定时间仅显示一个警告是库的限制(或设计选择),您正在调用函数更正。
  • 有什么问题?我能够让代码正常工作,就像一个接一个地一样,消息框一直在显示
  • 对不起,我忘了说我希望它们平行打开。如果一个消息框关闭,则需要在用户屏幕上显示 2 个。如果这 2 个被关闭,我希望在用户屏幕上出现 4 个框,依此类推。
  • 你可以用Toplevel()代替messagebox.showwarning()

标签: python python-3.x function tkinter messagebox


【解决方案1】:

messagebox 是模态窗口,它们保持打开并阻止您的代码,直到用户关闭它们。

我想并行打开几个你需要通过多个线程来完成。

你可以试试这样的:

import threading

for i in range(x):
    threading.Thread(target = open).start()

如果多线程不起作用,那么多处理就是要走的路:

from multiprocessing import Process
for i in range(x):
    p = Process(target=open).start()

【讨论】:

  • 很奇怪,对我来说还是一样
  • 好的。我没有想到这一点,那是因为python多线程并不是真正的多线程。您可以尝试使用多处理,但这对于这个简单的任务来说实在是太过分了。
  • 感谢 Jean-Marc 的回复,我会调查并告诉你进展如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 2020-09-02
  • 2010-09-20
  • 2015-08-19
  • 2023-03-05
  • 2019-03-04
  • 1970-01-01
相关资源
最近更新 更多