《Python编程》第八章:tkinter之旅(第一部分)之1:顶层窗口、对话框

概述

tkinter之旅(第一部分)主要介绍组件及相关内容:

  • Toplevel和Tk组件
  • Message和Entry组件
  • Checkbutton、Rodiobutton和Scale组件
  • 图像:PhotoImage和BitmapImage对象
  • 组件和窗口配置选项
  • 对话框(标准与自定义)
  • 低级别事件绑定
  • tkinter链接变量对象
  • 使用用于其他图形类型和操作的Python图形库(PIL)扩展

一、配置组件外观

  • 颜色bg选项设置背景颜色;fg设置显示文本颜色,支持英文(如:"blue")或十六进制字符串(如:"#ff0000");
  • 大小:设置高度、宽度 字体:font,三元组(字体系列、大小、类型);
  •            字体系列(如:Times、Courier、Helvetica等);
  •            大小即数字;
  •            类型:normal(正常)、hold(粗体)、romam(罗马)、italc(斜体)、underline(下划线)、overstrike(加粗)另,还可以组合,
  •            如holditalc(加粗斜体)
  • 布局、扩展:pack的时候expand(YES)、fill(BOTH、X、Y)选项会实现组件的扩展和拉伸

from tkinter import *
root =Tk()

labelfont = ('times',20,'bold')#字体系列、大小、类型
widget = Label(root,text="Hello config world!")
widget.config(bg='black',fg='yellow')#标签背景黑色,文本颜色黄色
widget.config(font=labelfont)#使用更大的字体
widget.config(height=3,width=20)#初始化大小:行间距、字符间距
widget.pack(expand=YES,fill=BOTH)
root.mainloop()

tkinter的其它自定义外观的方法:

  • 边框和浮凸:一个'bd=N'组件选项可用于设置边框宽度,而relief=S选项能够指定一种边框类型,S可以FLAT(扁平)、SUNKEN(凹陷)、RAISED(凸起)、GROOVE(凹槽)、SOLID(加粗)、RIDGE(脊状)
  • 光标cursor选项能够改变鼠标经过组件的鼠标形状;cursor='gumby'将鼠标指针变为Gumby图形、还有:watch(手表)、pencil(铅笔)、crdss(十字)、hand2(手形2)
  • 状态:一些组件同时也支持状态属性。状态属性会影响外观。如:state=DISABLED(禁用),禁用时组件置灰。NORMAL(正常)、READONLY(只读)
  • 留白:很多组件(按钮、标签、文本)周围都可添加额外空间。通过padx=N、pady=N来实现。
#自定义设置组件外观
from tkinter import *
root=Tk()
root.config(bg='red')
widget = Button(root,text='Ithing',padx=10,pady=10)#组件与文本的留白
widget.pack(padx=40,pady=20)#组件与程序顶层组件留白
widget.config(cursor='gumby')#鼠标
widget.config(bd=8,relief=RAISED)#边框宽度、类型
widget.config(bg='dark green',fg='white')#组件背景、字体颜色
widget.config(font=("helvetica",20,'underline italic'))#italc(斜体)、underline(下划线)

root.mainloop()

二、顶层窗口

1.Tk()或默认根窗口与Toplevel组件异同

2.顶层窗口协议

拦截关闭:protocol;WM_DELETE_WINDOW是弹窗关闭按钮的标识;

关闭所有窗口:quit;根窗口的按钮会运行quit方法,结束程序。

窗口标题:title

窗口图标:iconbitmap

几何管理:顶层窗口是其他组件的容器,很像一个独立的Frame.,顶层窗口组件自身永远不会被封装;

三.对话框

对话框:模态对话框、非模态对话框

模态对话框:会阻止其他界面,直到对话框被关闭;要想程序继续运行,用户必须对对话框做出回应。

非模态对话框:可以永久停留在屏幕上,不干扰界面中其他窗口,这种对话框常常可以随时接受输入。

1.标准(通用)对话框

下面3段代码,过程:C段代码import A段代码(一个quit关闭类)、B段代码(提供:按钮名称、tkinter标准对话框作为回调函数)实现一个启动栏弹窗。主要了解:tkinter中标准对话框(ask系列(askopenfilename、askcolor、askquestion、askfloat)show系列、)

A代码:

#md6_quitter
'''
验证退出请求的quit按钮;复用、连接其他GUI的实例,并按照需求重新封装
'''
from tkinter import *
from tkinter.messagebox import askokcancel   #获取封装的标准对话框
class Quitter(Frame):
    def __init__(self,parent=None):
        Frame.__init__(self,parent)
        self.pack()
        widget = Button(self,text='Quit',command=self.quit)
        widget.pack(side=LEFT,expand=YES,fill=BOTH)
    def quit(self):
        ans = askokcancel('Verify exit',"Really quit?")
        if ans:Frame.quit(self)

B代码:

#md7_对话框演示启动栏
#定义一个回调演示表
from tkinter.filedialog import askopenfilename#获取标准对话框
from tkinter.colorchooser import askcolor#Lib/tkinter中
from tkinter.messagebox import askquestion,showerror
from tkinter.simpledialog import askfloat

demos = {
    'Open':askopenfilename,
    'Color':askcolor,
    'Query':lambda :askquestion('Warning','You typed "rm *"\nConfirm?'),
    'Error':lambda :showerror('Error!','He is dead,jim'),
    'Input':lambda :askfloat('Entry','Enter credit card number')
}

C代码:

'''
创建一个简单的按钮栏,弹出对话框演示
'''
from tkinter import *
from md7_对话框演示启动栏 import demos#按钮回调处理程序
from md6_quitter import Quitter#增加一个退出对象
print(demos.items())
class Demo(Frame):
    def __init__(self,parent=None,**opthons):
        Frame.__init__(self,parent,**opthons)
        self.pack()
        Label(self,text='Basic demos').pack()
        for(key,value) in demos.items():
            Button(self,text=key,command=value).pack(side=TOP,fill=BOTH)
        Quitter(self).pack(side=TOP,fill=BOTH)

if __name__ == '__main__':
    Demo().mainloop()

结果:运行后,每一个按钮都会有对应结果,弹窗对应模态对话框

2.获取对话框结果并打印;使用lamdba函数传递回调函数;

知识点:模态对话框会返回用户操作值;

3.askcolor()的返回值

from tkinter import *
from tkinter.colorchooser import askcolor

def setBgColor():
    (triple,hexstr) = askcolor()#获取选择颜色并返回,如:((0.0, 255.99609375, 64.25), '#00ff40')
    if hexstr:
        print(hexstr)
        push.config(bg=hexstr)

root=Tk()
push = Button(root,text='Set Background Color',command=setBgColor)
push.config(height=3,font=('times',20,'bold'))
push.pack(expand=YES,fill=BOTH)
root.mainloop()

4、自定义对话框

focus_set()、grab_set()、wait_window()是创建模态对话框的关键函数。

focus_set:使得窗口接管应用程序的输入焦点

grab_set:禁用应用程序中的所有其他窗口

wait_window:暂停调用,直到这个弹出框本身被销毁。当窗口被destory方法所销毁时,grab会自动释放禁用其他窗口……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷凝娇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值