欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python GUI tkinter库 自学15

程序员文章站 2022-04-27 19:51:32
...

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):
        """
        用途:通过 Place 布局管理器实现扑克牌位置控制
        """
        ......
        ......
       

if __name__ == "__main__":
    window = Tk()
    # 创建主窗口
    window.geometry("570x200+200+200")
    window.title('扑克牌界面')
    # 对窗口进行大小、位置及名字设置

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

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

2、布局管理器代码(place)

# class Appication(Frame):
#     """
#     一个经典的 GUI 类的写法
#     """
    def CreateWidget(self):
        """
        用途:通过 Place 布局管理器实现扑克牌位置控制
        """
        # 让一张扑克牌出现在窗口处
        # self.photo = PhotoImage(file = "image\\puke1.gif")
        # self.pukes = Label(self.master, image = self.photo)
        # 此处注意第一个参数是 window 或 self.master
        # self.pukes.place(x = 10, y = 50)

        # 让序号为 A~10 的扑克牌出现在窗口处
        self.photos = [PhotoImage(file = "image\\puke"+str(i + 1)+".gif") for i in range(10)]
        # 此处的 "+str(i + 1)+" 应当注意
        self.pukes = [Label(self.master, image = self.photos[i]) for i in range(10)]

        for i in range(10):
            self.pukes[i].place(x = 10 + i * 40, y = 50)

        # 为所有的 Lable 增加事件处理
        self.pukes[0].bind_class("Label", "<Button-1>", self.chupai)

3、事件操作模块

# class Appication(Frame):
#     """
#     一个经典的 GUI 类的写法
#     """
    def chupai(self, event):
        print(event.widget.winfo_geometry())
        print(event.widget.winfo_x())

        if event.widget.winfo_y() == 30:
            event.widget.place(y = 50)
        if event.widget.winfo_y() == 50:
            event.widget.place(y = 30)

4、源代码

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):
        """
        用途:通过 Place 布局管理器实现扑克牌位置控制
        """
        # 让一张扑克牌出现在窗口处
        # self.photo = PhotoImage(file = "image\\puke1.gif")
        # self.pukes = Label(self.master, image = self.photo)
        # 此处注意第一个参数是 window 或 self.master
        # self.pukes.place(x = 10, y = 50)

        # 让序号为 A~10 的扑克牌出现在窗口处
        self.photos = [PhotoImage(file = "image\\puke"+str(i + 1)+".gif") for i in range(10)]
        # 此处的 "+str(i + 1)+" 应当注意
        self.pukes = [Label(self.master, image = self.photos[i]) for i in range(10)]

        for i in range(10):
            self.pukes[i].place(x = 10 + i * 40, y = 50)

        # 为所有的 Lable 增加事件处理
        self.pukes[0].bind_class("Label", "<Button-1>", self.chupai)

    def chupai(self, event):
        print(event.widget.winfo_geometry())
        print(event.widget.winfo_x())

        if event.widget.winfo_y() == 30:
            event.widget.place(y = 50)
        if event.widget.winfo_y() == 50:
            event.widget.place(y = 30)


if __name__ == "__main__":
    window = Tk()
    # 创建主窗口
    window.geometry("570x200+200+200")
    window.title('扑克牌界面')
    # 对窗口进行大小、位置及名字设置

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

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