最近有一个要求,用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\n", 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的更多相关文章

  1. Python Tkinter 学习成果:点歌软件music

    笔者工作业余时间也没什么爱好,社交圈子也小,主要娱乐就是背着自己带电瓶的卖唱音响到住地附近找个人多的位置唱唱KtV. 硬件上点歌就用笔记本电脑,歌曲都是网上下载的mkv格式的含有两个音轨的视频.因此点 ...

  2. python -Tkinter 实现一个小计算器功能

    文章来源:http://www.cnblogs.com/Skyyj/p/6618739.html 本代码是基于python 2.7的 如果是对于python3.X  则需要将 tkinter 改为Tk ...

  3. python Tkinter之Button

    Button小部件是一个标准的Tkinter的部件,用于实现各种按钮.按钮可以包含文本或图像,您可以调用Python函数或方法用于每个按钮. Tkinter的按钮被按下时,会自动调用该函数或方法. 该 ...

  4. python gui tkinter快速入门教程 | python tkinter tutorial

    本文首发于个人博客https://kezunlin.me/post/d5c57f56/,欢迎阅读最新内容! python tkinter tutorial Guide main ui messageb ...

  5. Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证

    Python tkinter 实现简单登陆注册 最终效果 开始界面 ​ 注册 登陆 ​ 源码 login.py # encoding=utf-8 from tkinter import * from ...

  6. python tkinter实现俄罗斯方块 基础版

    本项目最终效果见本人b站投稿av81480858 简介部分 本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 .其中1 ...

  7. Python Tkinter基础控件入门实例

    分享一个Python Tkinter基础控件用法的入门例子,包括窗口的显示.显示内置图片.弹出窗口.菜单等. 例子,Python Tkinter基础控件的用法 # -*- coding: utf-8 ...

  8. Python Tkinter Entry(文本框)

    Python学习记录--关于Tkinter Entry(文本框)的选项.方法说明,以及一些示例. 属性(Options) background(bg) borderwidth(bd) cursor e ...

  9. python tkinter Listbox用法

    python tkinter组件的Listbox的用法,见下面代码的演示: from tkinter import * root=Tk() v=StringVar() #Listbox与变量绑定' l ...

随机推荐

  1. Lua unpack函数用法

    unpack,接受一个table做个参数,然后按照下标返回数组的所有元素 unpack lua 版本 <= 5.1 local t = {nil , 3} retunrn unpack(t) / ...

  2. centos 安装mariadb 替代mysql

    yum install mariadb-server mariadb systemctl start mariadbmysql -uroot -p默认密码mysql -uroot -pmysql_se ...

  3. 预处理、const、static与sizeof-为什么要引入内联函数

    1:引入内联函数的主要目的是,用它替代C语言中表达形式的宏定义来解决程序中函数调用的效率问题.在C语言里可以使用如下的宏定义: #define ExpressionName(Var1,Var2) (V ...

  4. 剑指offer35----复制复杂链表

    题目: 请实现一个cloneNode方法,复制一个复杂链表. 在复杂链表中,每个结点除了有一个next指针指向下一个结点之外,还有一个random指向链表中的任意结点或者NULL. 结点的定义如下: ...

  5. 获取当前页面的webview ID

    代码: A页面 <script type="text/javascript"> var ws = null; mui.plusReady(function(){ ws ...

  6. BFS,优先队列优化

    题意: 'S' : 起点 'T' : 终点 '#' : 毒气室 'B' :氧气 'P':不消耗步数 每次经过毒气室需要一瓶氧气,氧气可以重复获得,但只能带五瓶氧气,问最少步数 solution: HI ...

  7. socket.io 的使用

    socket.io 是对 websocket 的封装,当你在客户端使用 socket.io 那么服务器也要对应的使用 目录结构: 使用方法: 客户端: socket.emit() 是提交数据,sock ...

  8. 腾讯云安装mysql数据库

    转载自  https://www.cnblogs.com/shalldou/p/10767043.html 首先,我们检测一下系统中是否已安装mysql的相关服务 命令: rpm -qa | grep ...

  9. 数据结构之队列(Queue)

    1,队列的定义 队列:是一种先进先出的数据结构,如下图所示,现进去的数据在队列前面(front),先出队列,后进入队列的数据在后面(rear),后出队列. 队列常用操作: q=Queue() #创建队 ...

  10. manifest节点

    xmlns:android属性——定义命名空间 这个属性定义了这个XML文件所使用的命名空间.如果需要指定特殊的命名空间,就需要手动编写代码,在Android Studio基本格式如下: xmlns: ...