求教 探讨python tkinter的messagebox

Posted restaurant

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求教 探讨python tkinter的messagebox相关的知识,希望对你有一定的参考价值。

最近有一个要求,用python的tkinter制作一个messagebox,传入3个参数: title  text timeout。用户可以点击“确定” 关闭窗口;  或者 等待几秒(timeout) 窗口自动关闭;

技术图片

 

一开始 我选择tkinter原生的messagebox,代码如下:

from tkinter import messagebox, Tk
root = Tk()
root.withdraw()
root.wm_attributes(-topmost, 1)

messagebox.showinfo(title, text)

但原生的messagebox不支持timeout。。。 只能放弃。(如果有谁知道解决办法,请评论~ 多谢。。。)




所以 我自己写了个窗口,代码也很简单。 但还是没实现timeout功能···  (哭泣,求助)

# -*- coding:utf-8 -*-
import tkinter as tk  # 导入tkinter模块
import time
import threading
import re


def center_window(root, width, height):  # 窗口居中
    screenwidth = root.winfo_screenwidth()
    screenheight = root.winfo_screenheight()
    size = %dx%d+%d+%d % (width, height, (screenwidth - width)/2, (screenheight - height)/2)
    root.geometry(size)


def msg_box(title="Info", text="text", width=330, height=100):
    window = tk.Tk()  # 主窗口
    window["bg"] = "white"
    window.wm_attributes(-topmost, 1)  # 窗口置顶
    window.title(title)  # 窗口标题
    center_window(window, width=width, height=height)  # 窗口 置于屏幕中央
    #text = re.sub(r"(.{20})", "1
", text)
    l = tk.Label(window, text=text, width=40, height=3, font=(Arial, 12), bg="white", relief="flat")
    l.pack()
    b = tk.Button(window, text=退出, command=window.quit, width=5, relief="groove", bg="white")
    b.pack(side=bottom, anchor="s")
    def auto_close():
        for i in range(30):
            time.sleep(1)
            print(i)
        window.destroy()
    t = threading.Thread(target=auto_close, daemon=True)
    t.start()
    # def fun_timer():
    #     global timer
    #     window.destroy()
    #     timer.cancel()
    # timer = threading.Timer(15, fun_timer)
    # timer.start()
    window.mainloop()  # 循环消息,让窗口活跃


if __name__ == __main__:
    # text = ""
    # text = "1"
    # text = "12345"
    # text = "123456789"
    # text = "你好"
    # text = "这是五个字"
    text = "落霞与孤鹭齐飞,秋水共长天一色"
    # text = "123456789abcdefghijklmn"

    for i in "abc":
        time.sleep(1)
        print(i)

    msg_box(text=text)

    for i in "正在等待最终结果":
        time.sleep(1)
        print(i)

如果感兴趣,大家可以运行这段代码,就知道存在什么问题了。。。

也希望 如果有对GUI编程懂得人或是了解tkinter的人 可以给出宝贵意见。

 

多谢~ (欢迎交流)

 

以上是关于求教 探讨python tkinter的messagebox的主要内容,如果未能解决你的问题,请参考以下文章

求教python的Dataframe写入Redis的方法

python高手求教,两个List怎么只改变一个List中元素的值不引起另一个List的变化

python菜单程序

Python中的tkinter库简单案例详解

Python Tkinter学习——第一个Tkinter程序

折腾Python中的Tkinter