10、Message与Messagebox
主要讲解消息Message和系统内建的8个消息对话框Messagebox。
10-1 Message
10-1-1 Message的基本概念
Widget控件中的Message主要是可以显示短消息,它的功能与Label类似,但是使用起来更灵活,可自动分行。对于一些不想再做进一步编辑的短文,可以使用Message显示。Message的构造方法如下。
Message(父对象, options)参数一:同上
其它option参数():
(1) anchor:如果空间大于所需时,控制消息的位置,默认是CENTER(居中)
Literal['nw', 'n', 'ne', 'w', 'center', 'e', 'sw', 's', 'se'],表示东南西北,
注意使用小写anchor=“se”,使用大写anchor=SE
(2) aspect:控件宽度与高度比,默认是150%。
(3) bg或background:背景色彩。
(4) bitmap:使用默认位图当作Message内容。
系统默认的图标:error、hourglass、info、questhead、question、warning、gray12、gray25,gray50、gray75。
(5) cursor:当鼠标光标在Message上方时的外形。
(6) ffg或foreground:字形色彩。
(7) font:可选择字形、字形样式与大小。
(8) height:Message高度,单位是字符。
(9) image:Message以图像方式呈现。
(10) justify:存在多方文本时最后一行的对齐方式,可取值有LEFT / CNETER / RIGHT(靠左/居中/靠右),默认是居中对齐。
(11) padx/pady:Message文字与边框的间距,单位是像素。.
padx可以设置标签文字左右边界与标签区间的x轴间距,pady可以设置标签文字上下
(12) relief:默认是relief=FLAT,可由此控制文字的外框。
(13) text:Message内容,如果有“\n” 则可输入多行文字。
(14) textvariable:可以设置Message以变量方式显示。
(15) underline:可以设置第几个文字有下画线,从0开始算起,默认是-1,表示无下画线。
(16) width:Message宽度,单位是字符
(17) wraplength:文本到多少宽度后换行,单位是像素。
下面程序实例:Message的基本应用。
from tkinter import * root = Tk() root.title("ch10_1") myText = "2026年6月,小明一个人顶了车票和机票,开始了他的西藏之旅。" msg = Message(root, bg="yellow", text=myText, font="times 12 italic") msg.pack(padx=10, pady=10) root.mainloop()执行结果
10-1-2 使用字符串变量处理text参数
本节以实例直接介绍。
下面程序实例:以字符串变量方式处理Message()内的text。
from tkinter import * root = Tk() root.title("ch10_2") var = StringVar() msg = Message(root, textvariable=var, relief=RAISED) var.set("2026年6月,小明一个人顶了车票和机票,开始了他的西藏之旅。") msg.pack(padx=10, pady=10) root.mainloop()执行结果
扩充上面实例,将背景设为黄色。
from tkinter import * root = Tk() root.title("ch10_3") var = StringVar() msg = Message(root, textvariable=var, relief=RAISED) var.set("2026年6月,小明一个人顶了车票和机票,开始了他的西藏之旅。") msg.config(bg="yellow") msg.pack(padx=10, pady=10) root.mainloop()执行结果
10-2 Messagebox
Python中的tkinter模块内有Messagebox模块,提供了8个对话框,这些对话框可以应用在不同场合,本节将做说明。
(1) showinfo(title, message, options):显示一般提示消息。
(2) showwraning(title, message, options):显示警告消息。
(3) showerror(title, message, options):显示警告消息。
(4) askquestion(title, message, options):显示问询消息。若单击“是”按钮会传回“yes”,若单击“否”按钮会传回“no”。
(5) askokcancel(title, message, options):显示确定或取消消息。若单击“确定”按钮会传回True,若单击“取消”按钮会传回False。
(6) askyesno(title, message, options):显示“是或否”消息。若单击“是”按钮会传回True,若单击“否”按钮会传回False。
(7) askyesnocancel(title, message, options):显示“是或否或取消”消息。若单击“是”按钮会传回True,若单击“否”按钮会传回False,若单击“取消”按钮会传回None。
(8) askretrycancel(title, message, options):显示“重试或取消”消息。若单击“重试”按钮会传回True,若单击“取消”按钮会传回False。
上述对话框方法内的参数大致相同,title是对话框的名称,message是对话框内的文字,options是选择性参数,可能值有下列三种。
(1) default(constant):默认按钮是OK(确定)、Yes(是)、Retry(重试)在前面,也可更改此设定。
(2) icon(constant):可设定所显示的图标,有INFO、ERROR、QUESTION、WRANNING 4种图标可以设置。
(3) parent(widget):指出当对话框关闭时,焦点窗口将返回此父窗口。
最后要留意的是上述对话框是放在tkinter模块内message模块下,所以若是要使用这些默认的对话框需要在程序开头增加下列导入语句。
from tkinter import message
下面程序实例:对话框设计的基本应用。
from tkinter import * from tkinter import messagebox def myMsg(): messagebox.showinfo('My Message Box', 'Python Tkinter学习') root = Tk() root.title("ch10_4") root.geometry("300x160") Button(root, text="Good Moring", command=myMsg).pack() root.mainloop()执行结果
使用Messagebox时,可以很容易建立和用户之间的对话,当用户单击按钮时,所响应的内容虽然已经说明过了,但是下面还是以设计程序行演示出用户单击功能按钮时所传回的信息。
下面程序实例:设计两个按钮,当单击按钮时会弹出对话框,当用户有响应时,在Python Shell窗口中列出所响应的内容。
from tkinter import * from tkinter import messagebox def myMsg1(): ret = messagebox.askretrycancel("Test1", "安装失败,再试一次?") print("安装失败", ret) def myMsg2(): ret = messagebox.askyesnocancel("Test2", "编辑完成,是或否或取消") print("编辑完成", ret) root = Tk() root.title("ch10_5") root.geometry("300x160") Button(root, text="安装失败", command=myMsg1).pack() Button(root, text="逻辑完成", command=myMsg2).pack() root.mainloop()执行结果 下面是两个实测结果。
有了用户单击按钮的传回值,就可以针对返回值做更进一步的操作了。