Python GUI tkinter库 自学8

1、一个经典的面向程序写法模块

from tkinter import *
from tkinter import messagebox
# 导入库文件

class Appication(Frame):
    """
    一个经典的 GUI 类的写法
    """
    # 定义类(Appication)、继承于 Frame 框架 (虚拟的矩形框架)
    def __init__(self, master = None):
        # 定义构造函数、并初始化父类为空
        super().__init__(master)
        # 通过 super() 调用父类、并将 master 传进去
        self.master = master
        # 令此类中的 master 等于传入的 window
        self.pack()
        # 布局此窗口

        self.CreateWidget()
        # 调用另一个函数 CreateWidget

    def CreateWidget(self):
        """
        用途:创建组件
        """
        ......
        ......
       

if __name__ == "__main__":
    window = Tk()
    # 创建主窗口
    window.geometry("500x200+200+200")
    window.title('一个经典的GUI程序')
    # 对窗口进行大小、位置及名字设置

    app = Appication(master = window)
    # 调用新创建的类、并进行初始化、将 master = window (主窗口)传递进去

    window.mainloop()
    # 调用 mainloop 方法、启用窗口并进入事件循环

2、Text 多行文本框及 Text 组件

Text 多行文本框

  1. Text 主要用于显示多行文本
  2. 还可以显示网络链接,图片,HTML 页面,甚至 CSS 样式表,添加组件等
  3. 因此,也常被当作简单的文本出来器,文本编辑器或网页浏览器来使用
  4. 比如,IDLE 就是 Text 组件构成的
# class Appication(Frame):
#     """
#     一个经典的 GUI 类的写法
#     """
    def CreateWidget(self):
        """
        用途:创建组件
        """
        self.text1 = Text(self, width = 40, height = 12, bg = "gray")
        # 宽度为 40 个字母 (20个汉字)、高度为 12 行、背景色为灰色
        self.text1.pack()
        # 布局此多行文本框

3、按钮组件(Button)

# class Appication(Frame):
#     """
#     一个经典的 GUI 类的写法
#     """
	def CreateWidget(self):
    	"""
    	用途:创建组件
    	"""
        Button(self,text = "重复插入文本", command = self.insertText).pack(side = "left")
        Button(self,text = "返回文本", command = self.returnText).pack(side = "left")
        Button(self,text = "添加图片", command = self.addImage).pack(side = "left")
        Button(self,text = "添加组件", command = self.addWidget).pack(side = "left")
        Button(self,text = "通过 tag 精确控制文本", command = self.testTag).pack(side = "left")

4、按钮组件引用的函数

# class Appication(Frame):
#     """
#     一个经典的 GUI 类的写法
#     """
    def insertText(self):
        # INSERT 索引表示在光标处插入
        self.text1.insert(INSERT, "xiaohan")
        # END 索引表示在最后插入
        self.text1.insert(END, "[新年快乐]")

    def returnText(self):
        # Indexes (索引) 是用来指向 Text 组件中文本的位置
        # Text 的组件索引也是对应字符的位置
        # 核心: 行号以 1 开始、列号以 0 开始
        print(self.text1.get(1.2, 1.6))
        print("所有文本内容: \n" + self.text1.get(1.0, END))

    def addImage(self):
        # global photo
        self.photo = PhotoImage(file = "image\\xiaohan.gif")
        self.text1.image_create(END, image = self.photo)

    def addWidget(self):
        self.button1 = Button(self.text1, text = "学习")
        # 在 Text 创建组件的命令
        self.text1.window_create(INSERT, window = self.button1)

    def testTag(self):
        self.text1.delete(1.0, END)
        self.text1.insert(INSERT, "good good study, day day up!\n学习带头人\nxiaohan\n百度")
        self.text1.tag_add("good", 1.0, 1.9)
        # 重命名文本但是不显示出来
        self.text1.tag_config("good", background = "black", foreground = "red") 
		# 将重命名的文本查找到后、令其背景色为黑、前景色为红
        self.text1.tag_add("baidu", 4.0, 4.2)
        # 重命名文本但是不显示出来
        self.text1.tag_config("baidu", underline = True)
        # 将重命名的文本查找到后、在其下面加上下划线
        self.text1.tag_bind("baidu", "<Button-1>", self.WebShow)
		# 将重命名的文本查找到后、绑定方法

5、WebShow 函数

import webbrowser # 调用打开网址的库文件
# class Appication(Frame):
#     """
#     一个经典的 GUI 类的写法
#     """
    def WebShow(self, event):
        webbrowser.open("http://www.baidu.com")

6、源代码

from tkinter import *
from tkinter import messagebox
import webbrowser # 调用打开网址的库文件
# 导入库文件


class Appication(Frame):
    """
    一个经典的 GUI 类的写法
    """
    # 定义类(Appication)、继承于 Frame 框架 (虚拟的矩形框架)
    def __init__(self, master = None):
        # 定义构造函数、并初始化父类为空
        super().__init__(master)
        # 通过 super() 调用父类、并将 master 传进去
        self.master = master
        # 令此类中的 master 等于传入的 window
        self.pack()
        # 布局此窗口

        self.CreateWidget()
        # 调用另一个函数 CreateWidget

    def CreateWidget(self):
        """
        用途:创建组件
        """
        self.text1 = Text(self, width = 40, height = 12, bg = "gray")
        # 宽度为 20 个字母 (10个汉字)、高度为 12 行
        self.text1.pack()

        self.text1.insert(1.0, "12345\n上山打老虎")

        Button(self,text = "重复插入文本", command = self.insertText).pack(side = "left")
        Button(self,text = "返回文本", command = self.returnText).pack(side = "left")
        Button(self,text = "添加图片", command = self.addImage).pack(side = "left")
        Button(self,text = "添加组件", command = self.addWidget).pack(side = "left")
        Button(self,text = "通过 tag 精确控制文本", command = self.testTag).pack(side = "left")

    def insertText(self):
        # INSERT 索引表示在光标处插入
        self.text1.insert(INSERT, "xiaohan")
        # END 索引表示在最后插入
        self.text1.insert(END, "[新年快乐]")

    def returnText(self):
        # Indexes (索引) 是用来指向 Text 组件中文本的位置
        # Text 的组件索引也是对应字符的位置
        # 核心: 行号以 1 开始、列号以 0 开始
        print(self.text1.get(1.2, 1.6))
        print("所有文本内容: \n" + self.text1.get(1.0, END))

    def addImage(self):
        # global photo
        self.photo = PhotoImage(file = "image\\xiaohan.gif")
        self.text1.image_create(END, image = self.photo)

    def addWidget(self):
        self.button1 = Button(self.text1, text = "学习")
        # 在 Text 创建组件的命令
        self.text1.window_create(INSERT, window = self.button1)

    def testTag(self):
        self.text1.delete(1.0, END)
        self.text1.insert(INSERT, "good good study, day day up!\n学习带头人\nxiaohan\n百度")
        self.text1.tag_add("good", 1.0, 1.9)
        # 重命名文本但是不显示出来
        self.text1.tag_config("good", background = "black", foreground = "red") 
		# 将重命名的文本查找到后、令其背景色为黑、前景色为红
        self.text1.tag_add("baidu", 4.0, 4.2)
        # 重命名文本但是不显示出来
        self.text1.tag_config("baidu", underline = True)
        # 将重命名的文本查找到后、在其下面加上下划线
        self.text1.tag_bind("baidu", "<Button-1>", self.WebShow)
		# 将重命名的文本查找到后、绑定方法
    def WebShow(self, event):
        webbrowser.open("http://www.baidu.com")


if __name__ == "__main__":
    window = Tk()
    # 创建主窗口
    window.geometry("500x200+200+200")
    window.title('一个经典的GUI程序')
    # 对窗口进行大小、位置及名字设置

    app = Appication(master = window)
    # 调用新创建的类、并进行初始化、将 master = window (主窗口)传递进去

    window.mainloop()
    # 调用 mainloop 方法、启用窗口并进入事件循环
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是我来晚了!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值