资讯详情

图形化界面设计—Tkinter模块学习(三)

前言

十二、组合框Combobox

十三、滑块Scale

十四、菜单Menu

十五、子窗体Toplevel

十六、对话框

1.新闻对话框

输入对话框

3.文件选择对话框

4.颜色选择对话框

绑定事件

总结:


在这里,我将继续承担上次写的东西 第十一点 ‘文本框Text’

十二、组合框Combobox

Combobox本质上是带文本框的下拉列表框,可以python在实际应用中,由于其灵活的界面,列表类型的数据可视化显示通常比列表框更受欢迎。该控件不直接包含在内tkinter它包含在模块中tkinter的子模块中里面如果需要需要单独导入( *) , 基本用法如下:

实例名称 = tk.Combobox(根窗,属性(如:textvariable=,values=)

注:在创建中Combobox需要先绑定tkinter内部类型变量

1、(如果导入tkinter模块的 * 这里可以省略 tk)

除了共有属性,控件还有获得选中值,获取选项的索引值。

相关代码显示如下:

import tkinter as tk from tkinter.ttk import *  def subtract():     #获取entry1的输入值     value1 = float(entry1.get())     # 获取entry2的输入值     value2 = float(entry2.get())     dic = {0:value1 value2,1:value1-value2,            2:value1*value2,3:value1/value2}     value3 = dic[combobox.current()]    #current()获取索引值的方法     #config()方法输出显示文本     label.config(text=value3)  root = tk.Tk() root.title('Combobox控件') root.geometry('480x260')  #声明变量类型 var = tk.StringVar() #创建组合框 combobox = Combobox(root,textvariable=var,values=加,减,乘 combobox.grid(column=1,row=2,ipady=3,pady=1)  #创建输入框 entry1 = tk.Entry(root) entry1.grid(column=0,row=0,ipady=3) entry2 = tk.Entry(root) entry2.grid(column=5,row=0,ipady=3)  # #创建按钮 button = tk.Button(root,text='计算',command=subtract) button.grid(column=1,row=3)  #Label标签 label = tk.Label(root,text='') label.grid(column=1,row=4)   root.mainloop()

如图所示:

十三、滑块Scale

Scale 用户可以移动标尺上的光标来设置数值,以创建标尺滑动条的对象。主要具有以下属性:

属性 功能描述
from 起始值(最小可取值)
label 标签文字,默认为无
length &nbp;   控件实例宽(水平)或高(垂直方向),默认为100像素
        orient       控件呈现方向,VERTICAL或HORIZONTAL(默认)
  repeatdelay                 鼠标延时(默认为300ms)
   resolution                 分辨精度(即最小取值间隔)
state       状态,若设置state=DISABLED,则滑块控件实例不可用

       sliderlength

 滑块宽度,默认为30像素
          to                            终止值(最大可取值)
 tickinterval         标尺间隔,默认为0,若设置过小,则会重叠
     width                 控件实例的宽度,默认为15像素
    variable 返回数值类型,可为 IntVar(整数)、DoubleVar(浮点数) 或StringVar(字符串)

Scale还有这两个常用方法:

(1)      (  取得目前标尺上的光标值 )。

(2) 设置目前标尺上的光标值 )。

下面以相关代码展示(绑定鼠标事件):

import tkinter as tk

#绑定鼠标事件需要传入参数event
def get_values(event):
    text = '滑块取值:'+ str(scale.get())
    label.config(text=text)

#根窗口
root = tk.Tk()
root.title('Scale控件')
#窗口初始大小
root.geometry('480x260')

#设置返回数值类型浮点型
var = tk.DoubleVar()
scale = tk.Scale(root,variable=var,label='拖动滑块选值',\
                 length=240,from_=1.0,to=10.0,orient='vertical',\
                 tickinterval=3.0,resolution=0.1)
#将滑块固定在4.0的位置
scale.set(4.0)
#释放鼠标左键ButtonRelease-1,调用函数get_values
scale.bind('<ButtonRelease-1>',get_values)
scale.pack()

#Label标签显示输出滑块值
label = tk.Label(root,text='')
label.place(x=250,y=100)

root.mainloop()

运行效果如图:

十四、菜单Menu

Mnue控件用于将一系列我们需要操作的命令,进行分组划分,从而更加方便用户进行操作。

主要用法如下:

 较为常见的方法有:

如果需要去除菜单分组的默认虚线可以使用 tearoff=False命令。

相关代码展示:

import tkinter as tk

#根窗口
root = tk.Tk()
root.title('Menu控件')
root.geometry('380x240+600+350')


#主菜单(只能有一个)
main_menu = tk.Menu(root)
#分组菜单
file_menu = tk.Menu(main_menu,tearoff=False)    #tearoff=False去除分组里的默认虚线
main_menu.add_cascade(label='文件',menu=file_menu)
file_menu.add_command(label='新建')

#子菜单
file_menu2 = tk.Menu(main_menu,tearoff=False)
edit_menu.add_cascade(label='打开',menu=file_menu2)
file_menu2.add_command(label='最近文件')

#分割线
file_menu.add_separator()
file_menu.add_command(label='退出')

edit_menu = tk.Menu(tearoff=False)  #tearoff=False去除分组里的默认虚线
main_menu.add_cascade(label='编辑',menu=edit_menu)
edit_menu.add_command(label='剪切')
edit_menu.add_command(label='粘贴')

format_menu = tk.Menu(tearoff=False)    #tearoff=False去除分组里的默认虚线
main_menu.add_cascade(label='格式',menu=format_menu)
format_menu.add_command(label='自动换行')
format_menu.add_command(label='字体')

see_menu = tk.Menu(tearoff=False)
main_menu.add_cascade(label='查看',menu=see_menu)
see_menu.add_command(label='缩放')

help_menu = tk.Menu(tearoff=False)
main_menu.add_cascade(label='帮助',menu=help_menu)
help_menu.add_command(label='查看帮助')

#显示菜单
root.config(menu=main_menu)

root.mainloop()

运行效果如图:

十五、子窗体Toplevel

Toplevel用于新建一个窗体于主窗体上(我们称为子窗体),可设置的属性基本于主窗体一致,也能实现在上面布局控件。相关代码展示如下:

import tkinter as tk

#创建一个窗口
root = tk.Tk()
root.title('主窗口')
#窗口初始化大小
root.geometry('320x240')

def newwindow():
    root2 = tk.Toplevel(root)
    root2.geometry('320x240')
    root2.title('子窗口')
    lb2 = tk.Label(root2,text='我在子窗体上面')
    lb2.place(relx=0.4,rely=0.2)
    bt = tk.Button(root2,text='关闭',command=root2.destroy)
    bt.place(relx=0.5,rely=0.4)

button = tk.Button(root,text='弹出子窗口',command=newwindow)
button.place(relx=0.4,rely=0.4)
root.mainloop()

       运行效果如图所示:

十六、对话框

对话框主要分为:

1、消息对话框

import tkinter as tk
import tkinter.messagebox as box

def askokcancel():
    box.askokcancel(title='确认取消对话框',message='这是个确认取消对话框')

root = tk.Tk()
root.title('对话框')
root.geometry('480x260+500+300')

button = tk.Button(root,text='确认取消对话框',command=askokcancel)
button.place(width=100,height=50,y=100,x=200)

root.mainloop()

运行效果如图:

import tkinter as tk
import tkinter.messagebox as box

def askokcancel():
    box.askyesno(title='是否对话框',message='这是个是否对话框')

root = tk.Tk()
root.title('对话框')
root.geometry('480x260+500+300')

button = tk.Button(root,text='是否对话框',command=askokcancel)
button.place(width=100,height=50,y=100,x=200)

root.mainloop()

运行效果如图:

import tkinter as tk
import tkinter.messagebox as box

def askokcancel():
    box.askretrycancel(title='重试取消对话框',message='这是个重试取消对话框')

root = tk.Tk()
root.title('对话框')
root.geometry('480x260+500+300')

button = tk.Button(root,text='重试取消对话框',command=askokcancel)
button.place(width=100,height=50,y=100,x=200)

root.mainloop()

 运行效果如图:

import tkinter as tk
import tkinter.messagebox as box

def askokcancel():
    box.askyesnocancel(title='是否取消对话框',message='这是个是否取消对话框')

root = tk.Tk()
root.title('对话框')
root.geometry('480x260+500+300')

button = tk.Button(root,text='是否取消对话框',command=askokcancel)
button.place(width=100,height=50,y=100,x=200)

root.mainloop()

 运行效果如图:

import tkinter as tk
import tkinter.messagebox as box

def askokcancel():
    box.showerror(title='错误消息对话框',message='这是个错误消息对话框')

root = tk.Tk()
root.title('对话框')
root.geometry('480x260+500+300')

button = tk.Button(root,text='错误消息对话框',command=askokcancel)
button.place(width=100,height=50,y=100,x=200)

root.mainloop()

 运行效果如图:

import tkinter as tk
import tkinter.messagebox as box

def askokcancel():
    box.showinfo(title='信息提示对话框',message='这是个信息提示对话框')

root = tk.Tk()
root.title('对话框')
root.geometry('480x260+500+300')

button = tk.Button(root,text='信息提示对话框',command=askokcancel)
button.place(width=100,height=50,y=100,x=200)

root.mainloop()

 运行效果如图:

import tkinter as tk
import tkinter.messagebox as box

def askokcancel():
    box.showwarning(title='警告对话框',message='这是个警告对话框')

root = tk.Tk()
root.title('对话框')
root.geometry('480x260+500+300')

button = tk.Button(root,text='警告对话框',command=askokcancel)
button.place(width=100,height=50,y=100,x=200)

root.mainloop()

 运行效果如图:

 以上就是消息对话框,共有7个。

import tkinter.simpledialog

import tkinter as tk
import tkinter.simpledialog as dia

def askokcancel():
    a = dia.askstring(title='askstring对话框',prompt='请输入一串内容:')
    print(a)

root = tk.Tk()
root.title('输入对话框')
root.geometry('480x260+500+300')

button = tk.Button(root,text='askstring对话框',command=askokcancel)
button.place(width=100,height=50,y=100,x=200)

root.mainloop()

 运行效果如图:

import tkinter as tk
import tkinter.simpledialog as dia

def askokcancel():
    a = dia.askinteger(title='askinteger对话框',prompt='请输入整数内容:')
    print(a)

root = tk.Tk()
root.title('输入对话框')
root.geometry('480x260+500+300')

button = tk.Button(root,text='askinteger对话框',command=askokcancel)
button.place(width=100,height=50,y=100,x=200)

root.mainloop()

 运行效果如图:

import tkinter as tk
import tkinter.simpledialog as dia

def askokcancel():
    a = dia.askfloat(title='askfloat对话框',prompt='请输入浮点数:')
    print(a)

root = tk.Tk()
root.title('输入对话框')
root.geometry('480x260+500+300')

button = tk.Button(root,text='askfloat对话框',command=askokcancel)
button.place(width=100,height=50,y=100,x=200)

root.mainloop()

 运行效果如图:

import tkinter.filedialog

import tkinter as tk
import tkinter.filedialog as dia

def askokcancel():
    file1 = dia.askopenfilename()
    file2 = dia.askopenfilenames()
    file3 = dia.asksaveasfilename()
    print(type(file1),file1,'\n',type(file2),file2,'\n',type(file3))

root = tk.Tk()
root.title('文件选择对话框')
root.geometry('480x260+500+300')

button = tk.Button(root,text='文件选择对话框',command=askokcancel)
button.place(width=100,height=50,y=100,x=200)

root.mainloop()

运行结果如图:

import tkinter.colorchooser

import tkinter as tk
import tkinter.colorchooser as color

def askokcancel():
    a = color.askcolor()
    print(type(a))
root = tk.Tk()
root.title('颜色选择对话框')
root.geometry('480x260+500+300')

button = tk.Button(root,text='颜色选择对话框',command=askokcancel)
button.place(width=100,height=50,y=100,x=200)

root.mainloop()

十七、绑定事件

将需要执行的事件与函数绑定,通过鼠标或键盘点击来响应触发函数执行,其用法如下:

常见的事件代码如下所示: 

注意:在进行事件与函数绑定的时候,需要为自定义的函数传入参数 event。event常见属性如下:

属性 作用
event.x或event.y  (x,y要小写) 绑定事件触发时,获取相对于控件实例的左边距离x,上边距离y (单位:像素)
event.root_x或event.root_y (x,y要小写) 获取相对于屏幕左上角的坐标值  (单位:像素)
keysysm 字符(或字符型)按键名称
keysysm_num 按键的十进制ASCII码值
char 可显示的字符

下面以列表框那节的例子(新加绑定鼠标左键松开)演示一下:

import tkinter as tk

#单击鼠标左键响应事件
def ini():
    teachers = ['张三','李五','王六']
    course = ['python','java','c++']
    for i in teachers:
        lisbox1.insert(0,i)

    for j in course:
        lisbox2.insert('end',j)

def add(event):
    s = '老师:'+lisbox1.get(lisbox1.curselection())+','+'教授课程:',\
            lisbox2.get(lisbox1.curselection())
    lisbox3.insert(0,s)

root = tk.Tk()
root.geometry('480x300')
root.title('绑定事件')

#创建Frame框架
frame1 = tk.Frame(root,relief='sunken',)
frame1.place(x=0,width=150,height=250)
frame2 = tk.Frame(root,relief='sunken')
frame2.place(x=150,width=150,height=250)
frame3 = tk.Frame(root)
frame3.place(x=300,width=250,height=250)


#创建列表框
lisbox1 = tk.Listbox(frame1,font='微软雅黑')
#注意    这里设置的width=150,height=500,是被第九行设置的宽度和高度限制的,
#       虽然这里设置了500的高,但实际只能显示250
lisbox1.place(width=150,height=500)
#绑定鼠标左键松开事件
lisbox1.bind('<ButtonRelease-1>',add)
lisbox2 = tk.Listbox(frame2,font='微软雅黑')
lisbox2.place(width=150,height=500)
lisbox3 = tk.Listbox(frame3,font='微软雅黑')
lisbox3.place(width=250,height=500)


ini()
root.mainloop()

效果如图所示:

在绑定鼠标事件的时候,,,这样会很打脑壳,因为我一开始就是这样弄的,给大家看下,很麻烦。

 

如上图我第一次点击‘张三’,但却没有显示在右侧的列表框

接着,又点击了两次 ‘李五’,这时右侧有显示,但明显不对

 总结:

以上这些就是Tkinter模块学习第三部分要分享的了,到这里Tkinter模块学习也差不多结束了,画布的话要后面在学了,因为是最后一部分了,内容比较之前的可能有点多,又是初学,内容难免有不严谨或错误之处,希望大家可以来评论留言之处,我们一起学习,谢谢大家看我写的小东西,谢谢!

标签: 连接器tk10

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司