Python GUI:Tkinter——03


文章续 Python GUI:Tkinter——02

常用的MessageBox

Python GUI:Tkinter——02的末尾曾经讲过弹窗。如何弹窗?就是下面的内容。MessageBox 常用的有4种, showinfo、showwarning、showerror、showerror,用法如下:

下面的代码是为了生成独立的出窗口。一般情况下,不用 root 这句代码。

from tkinter import messagebox as mBox
import tkinter as tk
root = tk.Tk()
root.withdraw()        
mBox.showinfo('','A Python GUI created using tkinter:\n \
              The year is 2015')
mBox.showwarning('warning','hhhhaa')
mBox.showerror('error','Error')

answer = mBox.askyesno('Is Right','You are a Pig?')
print(answer)    #True of False

这个是单独使用的 MessageBox 代码。当然,也可以用作某个控件的 command 函数,来展示以上窗口。这些窗口除了前三个之外,最后一个可以将结果(yes no)输出给一个参数。这个参数的取值为 True 或者 False

我们给 clickBut 函数加点料,让别人在点击按钮的时候,弹出一个可爱的对话框吧:

.......
def clickBut():
    aButton.configure(text='hello'+etyVar.get()+comVar.get())
    mBox.showerror('错误提示框','你没有错,是我错了')
......

效果:
点击了 clickme 按钮之后,就会弹出如下对话框:
在这里插入图片描述

修改左上角的图标

Python GUI:Tkinter——02曾经提到,如何修改我们的 ICON 或者说 logo 呢?如何把标题栏上的讨厌羽毛弄掉呢?一句就够了,是的一句:
win.iconbitmap(r'../xxx.ico')即可

这里推荐一个 icon 的下载链接:点我

随便下载一个后,就可以用上述代码把讨人厌的羽毛给换掉了,咔咔咔~

......
win = tk.Tk()
win.title('标题')
win.iconbitmap(r'../app.ico')    #我把下载过来的 icon 文件更名为 app.ico 了
......

但是有一个问题,就是 MessageBox 弹出来的对话框中,其 icon 还是讨人厌的羽毛?怎么办呢?评论区回答一下吧。

给 ScrolledText 插入字符串

ScrolledText 控件(见01)能够很好的展示字符串。所以,根据代码自动地在里面插入字符串,从而起到展示的效果,这个功能很重要。怎么弄呢?
scr.insert(tk.INSERT, xxx)即可,其中 scr 是 ScrolledText 对象

重磅:OOP之提示框

这个是这一章最有养分的地方了。在这一节,我们将实现一个提示框。当然,如果能记就记住代码吧。实在不行,如果有用到,回来我的博客复制便是。按照惯例,首先来看一下效果。
在这里插入图片描述
这里实现的是,只要把鼠标停留在相应的控件中,就会出现黄色的提示框。这个提示框是 tkinter 没有的,现在我们就自己实现一个!!

代码

先是代码文件,为了重复使用这段代码,我们把他命名为 tooltips.py:然后码上:

import tkinter as tk

class Tooltip():
    def __init__(self,widget):
        self.widget = widget
        self.tipwindow = None   #这个 tipwindow 就是图中的黄色框,我们用 tk.TopLevel 实现,具体请向下看!
        self.id = None    #这个暂时没用
        self.x = self.y = 0    #这个决定了框框的大小和位置
    def showtip(self,text):
        self.text = text
        if self.tipwindow or not self.text:
            #如果已经有 window 或者 没文本 就返回
            return
        #showtip 用于创建 tipwindow 同时显示 text
        x,y,_cx,cy = self.widget.bbox("insert")
        #获取坐标(输入的地方)。其中_cx 表示不用
        x = x + self.widget.winfo_rootx()+27
        y = y + cy + self.widget.winfo_rooty()+27
        self.tipwindow = tw = tk.Toplevel(self.widget)
        # toplevel 可以看成一个 frame 或者 win,其中 widget表明:
        # 这个 frame 长在 widget 上面
        tw.wm_overrideredirect(1)    #暂时不清楚
        tw.wm_geometry("+%d+%d"%(x,y))
        #前面两句可能是为了显示 toplevel,并设置其大小
        label = tk.Label(tw,text=self.text,justify=tk.LEFT,
                         background='#ffffe0',relief=tk.SOLID,
                         borderwidth=1,font=('tahma',"8","normal"))
        label.pack(ipadx=1)    #放置label
    
    def hidetip(self):
        """销毁"""
        tw = self.tipwindow
        self.tipwindow = None #将变量指向None对象
        if tw:
            tw.destroy()
            
def createToolTip(widget,text):
    aTooltip = Tooltip(widget)    #实例化一个对象
    def enter(event):    #定义一个鼠标事件触发函数
        aTooltip.showtip(text)
    def leave(event):
        aTooltip.hidetip()
    widget.bind('<Enter>',enter)    #给控件绑定一个鼠标事件
    widget.bind('<Leave>',leave)

实现

有了 tooltips.py 后,我们就可以在我们想要创建提示框的控件中,加入如下语句:

.......
from tkinter import scrolledtext    #承接第二章的代码
scrW = 30
scrH = 3
aScrTxt = scrolledtext.ScrolledText(zhuo,height=scrH,width=scrW,wrap=tk.WORD)
aScrTxt.grid(row=4,column=0,columnspan=3)
from tooltips import *    #首先导入模块,请把 tooltips.py 文件放置到同一文件夹下
createToolTip(aScrTxt,'I am a scrolledtext, I was created by zhuo muniao')    #给控件 aScrTxt 绑定一个提示框。
.......

新控件—— spinbox

spinbox 何许人也?这个控件隶属与 tk 而不是 ttk。它能够上下调制输出的值,也支持用户自己输入值。属于一个比较冷门,但也常用的控件,他长得怎么样呢?靓仔!!你可能已经在上幅图中看过了,没错,它就出现在最底下的角落,那个最靓的仔!
在这里插入图片描述
看见了吧,长这样。其代码如下:

......
from tkinter import Spinbox
aSpinbox = Spinbox(aLabelFrame,from_=0,to=10,state='readonly')   #更改 state 就可以允许可写
# aSpinbox = Spinbox(aLabelFrame,values=(1,2,5,10))    #也可以用 value 参数来设置
"""也可以用 value 来修改"""
# aSpinbox = Spinbox(aLabelFrame)
# aSpinbox['value'] = (1,2,5,10)
aSpinbox.grid(column=0,row=3)
......

如果用 from_,to 参数来设置,就是自然序列。如果是用 values 参数来设置,就不是咯!

总结

依照惯例,我们对本章做一个总结。这一章最爆料的,就是完善了一个提示框了吧。当然,也对我们的 GUI 进行了一次小修小补,使他看起来更加美丽动人了。

相信大家已经跃跃欲试,想要开发自己的 GUI 了。但请不要这样子做,因为我们先前的打码方式,只是写笔记的方式,用来开发一个大型的 GUI 或者一般中等的 GUI,是十分吃力的。

在第二章的末尾,我们提到了一个非常难以解决的问题:变量命名。别小看他,如果代码量大了,我们又无法把他弄成两个 .py 文件(上一章解释了),那么等待这我们的,将会是让我们头皮发麻的代码维护工作。因此,咱们暂且压制我们开发 GUI 的心情。

如何解决呢?请看下一章 Python GUI:Tkinter——04

猜你喜欢

转载自blog.csdn.net/weixin_42141390/article/details/106414418
今日推荐