目录
GUI图形用户编程(四)
其他组件
OptionMenu选择项
Scale移动滑块
颜色选择框
文件对话框
文件对话框包含如下一些常用函数:
命名参数options的常见值如下:
简单输入对话框
通用消息框
ttk子模块控件
菜单
OptionMenu(选择项)用来做多选一,选中的项在顶部显示。显示效果如下:
OptionMenu(选择项)的基本用法:
'''optionmenu的使用测试'''
from tkinter import *
root=Tk()
root.geometry("200x100")
v=StringVar(root)
v.set("北京") #默认显示的地点
om=OptionMenu(root,v,"上海","深圳","广州","其他……")
om["width"]=10
om.pack()
def test01():
print("所在城市是:",v.get())
Button(root,text="确定",command=test01).pack()
root.mainloop()
Scale(移动滑块)用于指定的数值区间,通过滑块的移动来选择值。
使用Scale(移动滑块)控制字体大小变化:
效果图:
代码演示:
'''Scale滑块的使用测试'''
from tkinter import *
root=Tk()
root.geometry("400x150")
def test01(value):
print("滑块的值:",value)
newFont=("宋体",value)
a.config(font=newFont)
s1=Scale(root,from_=10,to=50,length=200,tickinterval=5,orient=HORIZONTAL,command=test01)
s1.pack()
a=Label(root,text="python",width=10,height=1,bg="grey",fg="white")
a.pack()
root.mainloop()
颜色选择框可以帮助我们设置背景色、前景色、画笔颜色、字体颜色等等。
如图:
颜色选择框基本用法:
文件对话框帮助我们实现可视化的操作目录、操作文件。最后,将文件、目录的信息传入到程序中。文件对话框包含如下一些常用函数:
函数名 | 对话框 | 说明 |
---|---|---|
askopenfilename(**options) | 文件对话框 | 返回打开的文件名 |
askopenfilenames(**options) | 返回打开的多个文件名列表 | |
askopenfile(**options) | 返回打开文件对象 | |
askopenfiles(**options) | 返回打开的文件对象的列表 | |
askdirectory(**options) | 目录对话框 | 返回目录名 |
asksaveasfile(**options) | 保存对话框 | 返回保存的文件对象 |
asksaveasfilename(**options) | 返回保存的文件名 |
参数名 | 说明 |
---|---|
defaulttextension | 默认后缀:.xxx 用户没有输入则自动添加 |
filetypes=[(label1,pattern1),(label2,pattern2)] | 文件显示过滤器 |
initaldir | 初始目录 |
initalfile | 初始文件 |
parent | 父窗口,默认根窗口 |
title | 窗口标题 |
文件对话框的基本用法:
'''简单对话框'''
from tkinter.simpledialog import *
root=Tk();root.geometry("400x100")
def test01():
a=askinteger(title="输入年龄",prompt="请输入年龄",initialvalue=18,minvalue=1,maxvalue=150)
show["text"]=a
Button(root,text="当前年龄?请输入",command=test01).pack()
show=Label(root,width=40,height=3,bg="grey")
show.pack()
root.mainloop()
Simpledialog(简单对话框)包含如下常用函数:
函数名 | 说明 |
---|---|
askfloat(title,prompt,**kw) | 输入并返回浮点值 |
askinteger(title,prompt,**kw) | 输入并返回整数 |
askstring(title,prompt,**kw) | 输入并返回字符串 |
参数中,title表示窗口标题;prompt是提示信息;命名参数kw为各种选项:initialvalue(初始值)、minvalue(最小值)、maxvalue(最大值)
简单对话框基本用法:
'''简单对话框'''
from tkinter.simpledialog import *
root=Tk();root.geometry("400x100")
def test01():
a=askinteger(title="输入年龄",prompt="请输入年龄",initialvalue=18,minvalue=1,maxvalue=150)
show["text"]=a
Button(root,text="当前年龄?请输入",command=test01).pack()
show=Label(root,width=40,height=3,bg="grey")
show.pack()
root.mainloop()
函数名 | 说明 |
---|---|
askokcancel(title,message,**options) | OK/Cancel 对话框 |
askquestion(title,message,**options) | Yes/No 问题对话框 |
askretrycance(title,message,**options) | Retry/Cancel 问题对话框 |
showerror(title,message,**options) | 错误消息对话框 |
showinfo(title,message,**options) | 消息框 |
showwarning(title,massage,**options) | 警告消息框 |
通用消息框的基本用法:
'''通用消息框'''
from tkinter import *
from tkinter.messagebox import *
root=Tk();root.geometry("400x100")
a1=showinfo(title="python",message="Python基础学习")
print(a1)
root.mainloop()
之前学习的组件时tkinter模块下的组件,整体风格较老套较丑。为了弥补这点不足,推出了ttk组件。ttk组件更加美观、功能更加强大。新增了LabeledScale(带标签的Scale)、Notebook(多文档窗口)、Progressbar(进度条)、Treeview(数)等组件。
使用ttk组件与使用普通的tkinter组件并没有多大的区别,只要导入ttk模块即可。
GUI程序通常都有菜单,方便用户的交互。一般将菜单分为两种:
1.主菜单
主菜单通常位于GUI程序上方。例如:
2.上下文菜单
快捷菜单(上下文菜单)是通过鼠标右键单击组件而弹出的菜单,一般是和这个组件相关的操作,比如:剪切、复制、粘贴、属性等。创建快捷菜单步骤如下:
(1)创建菜单
menubar=tk.Menu(root)
menubar.add_command(label="字体")
(2)绑定鼠标右键单击事件
def test(event):
menubar.post(event.x_root,event.y_root)#在鼠标右键单击坐标出显示菜单
root.bind("",test)
为记事本程序增加上下文菜单:
如图:
代码演示:
'''开发记事本软件的菜单'''
from tkinter.filedialog import *
class Application(Frame):
def __init__(self,master=None):
super().__init__(master) #super()代表的是父类的定义,而不是父类对象
self.master=master
self.textpad=None #textpad表示Text文本框对象
self.pack()
self.createWidget()
def createWidget(self):
#创建主菜单
menubar=Menu(root)
#创建子菜单
menuFile=Menu(menubar)
menuEdit=Menu(menubar)
menuHelp=Menu(menubar)
#将子菜单加入到主菜单栏
menubar.add_cascade(label="文件(F)",menu=menuFile)
menubar.add_cascade(label="编辑(E)",menu=menuEdit)
menubar.add_cascade(label="帮助(H)",menu=menuEdit)
#添加菜单项
menuFile.add_command(label="新建",accelerator="ctrl+n",command=self.test)
menuFile.add_command(label="打开",accelerator="ctrl+o",command=self.test)
menuFile.add_command(label="保存",accelerator="ctrl+s",command=self.test)
menuFile.add_separator() #添加分割线
menuFile.add_command(label="退出",accelerator="ctrl+q",command=self.test)
#将主菜单栏加到根窗口
root["menu"]=menubar
#文本编辑区
self.textpad=Text(root,width=50,height=30)
self.textpad.pack()
#创建上下菜单
self.contextMenu=Menu(root)
self.contextMenu.add_command(label="背景颜色",command=self.test)
#为右键绑定事件
root.bind("",self.createContextMenu)
def test(self):
pass
def createContextMenu(self,event):
#菜单在鼠标右键单击的坐标处显示
self.contextMenu.post(event.x_root,event.y_root)
if __name__=='__main__':
root=Tk()
root.geometry("450x300+200+300")
root.title("简易记事本")
app=Application(master=root)
root.mainloop()