Python GUI:Tkinter——04

本文介绍了Tkinter数据类型,探讨如何获取控件输入,并深入讲解Tkinter的面向对象编程(OOP)。通过实例展示了如何在Tkinter中使用Canvas控件展示GIF图像和其他非GIF图像,以及OOP在GUI开发中的优势。
摘要由CSDN通过智能技术生成

Tkinter 中的数据类型

经过前面三章的学习,相信大家要看懂下面的代码已经不是难事。如果没有看过前面的章节,建议大家翻看Python GUI:Tkinter——03

下面这些代码将演示如何使用 Tkinter 的数据类型。不得不说的是,前面的开发中,我们只是开发了一个空壳子。数据之间是如何传递的,我们尚未搞明白。但多少知道一个道理:Python 通过 tkinter 模块来访问 Tkinter,也即 API 的。因此,Tkinter 有自己的数据类型,我们在使用它是,要声明,就像 C 语言和 Java 那样。Python 则不然,它是动态类语言,因此不用声明,但运行速度慢。

似乎有一种语言(顺带一提)结合了动态类和静态类,它就是 Julia,据说不错,我没用过,也没看过(你懂的)

import tkinter as tk
win = tk.Tk()

strVar = tk.StringVar()
strVar.set('Hello Zhuo muniao')
str_py = strVar.get()
print(str_py)    #输出 Hello Zhuo muniao
"""让我们看看各个 tkinter 变量的初始值吧"""
print(tk.IntVar())   #PY_VAR52
print(tk.DoubleVar())    #PY_VAR53
print(tk.BooleanVar())    #PY_VAR54
""" PY_VAR52,证明没有值!!是这样吗,请继续往下看"""
print(tk.IntVar().get())    #0
print(tk.DoubleVar().get())    #0.0
print(tk.BooleanVar().get())    #False

顺带一提,在声明了 tkinter 变量后,可以在看到:
在这里插入图片描述

如何获取控件的输入呢?

一个带有控件的输入一般可以分为:

  • 字符串输入
  • 数值输入

前者有 Entry、Scrolledtext;后者有 Combobox、Spinbox 等。当然,他们本质上都是字符串输入。哈哈,皮了一下。也就是说,他们都能够赋值给 StringVar 变量。然而,不需要多次一举

比如在我们的定义的 Entry 、Combobx 控件中,我们曾经是这样定义的:

......
etyVar = tk.StringVar()
aEntry = ttk.Entry(zhuo,textvariable=etyVar)
aEntry.grid(column=0,row=1)

comVar = tk.StringVar()
aCombobox = ttk.Combobox(zhuo,textvariable=comVar,state='readonly')
aCombobox['value'] = (1,2,4,8)
aCombobox.grid(column=1,row=1)

def clickBut():
    aButton.configure(text='hello'+etyVar.get()+comVar.get())
    mBox.showerror('错误提示框','你没有错,是我错了')
aButton = ttk.Button(zhuo,text='click me',command=clickBut)
aButton.grid(column=2,row=1)
......

然后,在 clickBut 激活函数中,我们用 etyVar 和 comVar 来获取控件的输入。但这没必要,只需要用 控件的 .get() 接口就行了。我们修改 clickBut 函数:

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

然后发现功能还是一样的。实际上,所有的控件,无论它什么类型,都能用 .get() 接口来获取其输入。

OOP

为什么要面向对象?

  • 首先可以封装,封装的一大好处是,给变量弄静态类。如上一节所述,能够避免命名变量的麻烦
  • 其二,每个控件的 callback 函数可以随便放,而不需要一定放在前面(也即打破了声明)
  • 其三,多文件编程。在第二章中,我们做了一个伟大的、但失败了的尝试,然而 OOP 做到了。

Tkinter 的 GUI 是如何工作的

Tkinter 实现的 GUI ,或者说大部分的软件,他们都是以一个无限循环事件来工作的。所有代码都在循环执行。更确切地说,GUI 是静止的,直到用户发出某个事件时,才暗流涌动。比如,某个点击事件,会触发 GUI 程序的一系列响应。假若用户将 GUI 高高挂起,或者“走开”了一段时间,那么 GUI 就像洋娃娃一样一动不动。

OOP 开发

我们将上一章的代码改写为 OOP,如果没有阅读过上一章,点击Python GUI:Tkinter——03跳转

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox as mBox
from tkinter import Menu
from sys import exit
from tooltips import *    #见上一章
from tkinter import scrolledtext
from tkinter import Spinbox

class OOP():
    def __init__(self):
        self.win = tk.Tk()
        self.win.title('标题')
        self.win.iconbitmap(r'../app.ico')
        self._createWidget()
        
    
    def _clickBut(self):
        self.aButton.configure(text='hello'+self.aEntry.get()+self.aCombobox.get())
        mBox.showerror('错误提示框','你没有错,是我错了')
    def _quit(self):
        self.win.quit()
        self.win.destroy()
        exit()
    def _clickRad(self):
        flag = self._radVar.get
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhuo木鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值