python tkinter

基本使用

基于tkinter创建 GUI基本四步:窗口->组件->布局->事件

1.创建窗口对象

from tkinter import *

root = Tk()  # 创建窗口

root.mainloop()  # 进入事件循环

2.创建组件

按钮文本等组件

btn = Button(root)  # 创建Button组件,使组件在root窗口展示
btn['text'] = '我是按钮'  # 组件属性参数

3.布局管理

管理组件的大小位置样式

btn.pack()  # 布局管理器,组件的大小位置样式

4.事件

通过与组件绑定,获取组件所触发的事件

def btn_event(obj):  # obj 即事件对象
    print('控制台输出:'+'触发了事件')  # 输出到控制台
btn.bind('<Button-1>', btn_event)  # 事件和组件进行绑定

案例:

from tkinter import *
from tkinter import messagebox

root = Tk()  # 创建窗口

btn = Button(root)  # 创建Button组件,使组件在root窗口展示
btn['text'] = '我是按钮'
btn.pack()  # 布局管理器,配置组件的样式

def btn_event(obj):  # obj 即事件对象
    messagebox.showinfo("Message","触发了事件")  # 弹出新的窗口,并展示内容
    print('控制台输出:'+'触发了事件')  # 输出到控制台

btn.bind('<Button-1>', btn_event)  # 事件绑定,事件和组件进行绑定  <Button-1> :鼠标左键点击一次  <Button-2>:鼠标右键点击一次

if __name__ == '__main__':
    root.mainloop()  # 进入事件循环

主窗口

title('窗口标题')

geometry('wxh ± x, ±y') 

  • w:宽度
  • h:高度
  • +x:距屏幕左边的距离,-x:距屏幕右边的距离
  • +y:距屏幕上边的距离,-y:距;屏幕下边的距离
root.geometry('500x300+100+200')  # 宽度500,高度300,距左边100,距上边200

组件

Toplevel 顶层 容器类,可为其他组件提供单独的容器,类似窗口
Button 按钮 按钮点击组件
Ganvas 画布 提供绘图功能
Radiobutton 单选框 单选框
CheckButton 复选框 可勾选的复选框
Entry 单行输入框 可输入内容

simpledialog其子方法

简单输入框
filedialog其子方法 文件对话框 用于打开系统文件
Frame 容器 用于装载其他组件
LabelFrame 容器 类似Frame,但可以添加标题
label 标签 显示不可编辑的文本或图标
Listbox 列表框 可列出多个选项
Menu 菜单 菜单组件
MenuButton 菜单按钮 包含菜单的按钮,包括下拉层叠式等
OptionMenuu 菜单按钮 MenuButton的子类,可通过按钮打开一个菜单
Message 消息框 可以显示多行文档

messagebox

通用消息框 用于和用户简单的消息交互
Text 文本框 可显示多行文本、图片、连接、HTML页面、CSS样式,甚至可添加组件等
Scale 滑块 可移动滑块

askcolor

颜色

Frame容器

GUI编程就是编写一个个组件,界面由组件组成,组件内又可以创建组件,这种组件即为容器

import tkinter as tk
from tkinter import Frame

root = tk.Tk()
root.title('包含容器的GUI')
root.geometry('500x300+200+200')
frame = Frame(master=root)  # 在root中创建容器
frame.pack()

root.mainloop()

经典的面向对象的GUI

import tkinter as tk
from tkinter import *
from tkinter import messagebox

root = tk.Tk()
root.title('经典的面向对象的GUI')
root.geometry('500x300+200+200')

class Application(Frame):
    def __init__(self, master):
        super().__init__(master)

        self.master = master
        self.pack()
        self.create_widget()

    def create_widget(self):
        '''创建各种组件'''
        self.btn01 = Button(self, text='容器的按钮01', command=self.btn01_event)  # 创建button组件,在Frame中显示,这里的self是Frame
        self.btn01.pack()

        self.btn02 = Button(self, text='退出', command=root.destroy)
        self.btn02.pack()

    def btn01_event(self):
        messagebox.showinfo('Message', '触发了事件')
        print('控制台输出:' + '触发了事件')  # 输出到控制台


def main():
    app = Application(root)
    root.mainloop()

if __name__ == '__main__':
    main()

 

 Label

  • font:字体和大小,1个中文宽度两个字符,高度一个字符
  • image:图片,目前支持gif
  • fg:前景色,bg:背景色
  • justigy:对齐方式,left、center、right
  • width:宽度,heigth:高度
import tkinter as tk
from tkinter import *
from tkinter import messagebox

root = tk.Tk()
root.title('我是窗口')
root.geometry('500x300+200+200')


class Application(Frame):
    def __init__(self, master):
        super().__init__(master)

        self.master = master
        self.pack()
        self.create_widget()

    def create_widget(self):
        '''创建各种组件'''
        # 文件标签
        self.text_label = Label(self, text='label组件',
                           width=10, height=2, bg='black', fg='white', font=('黑体', 15), justify='left', borderwidth=1)
        self.text_label.pack()
        self.text_label2 = Label(self, text='label组件\nlabel组件内容不能修改\n哈哈',
                           bg='black', fg='white', font=('黑体', 15), justify='left', borderwidth=1)
        self.text_label2.pack()
        # 图片标签
        global PHOTO
        PHOTO = PhotoImage(file='img.gif')  # 注意:图片最好是全局变量
        self.photo_label = Label(root, image=PHOTO)
        self.photo_label.pack()


def main():
    app = Application(root)
    root.mainloop()

if __name__ == '__main__':
    main()

Button

import tkinter as tk
from tkinter import *
from tkinter import messagebox

root = tk.Tk()
root.title('我是窗口')
root.geometry('500x300+200+200')

PHOTO = PhotoImage(file='img.gif')  # 注意:图片最好是全局变量


class Application(Frame):
    def __init__(self, master):
        super().__init__(master)

        self.master = master
        self.pack()
        self.create_widget()

    def create_widget(self):
        '''创建各种组件'''
        self.login_btn = Button(self, text='登录', command=self.login_event)  # 创建button组件,在Frame中显示,这里的self是Frame
        self.login_btn.pack()

        self.image_btn = Button(self, image=PHOTO, command=self.image_event)
        self.image_btn.pack()
        self.image_btn['state'] = 'disable'  # 按钮禁止点击

    def image_event(self):
        messagebox.showinfo('Message', '点击了图片')

    def login_event(self):
        messagebox.showinfo('Message', '登录成功')
        # print('控制台输出:' + '触发了事件')  # 输出到控制台


def main():
    app = Application(root)
    root.mainloop()

if __name__ == '__main__':
    main()

Entry

import tkinter as tk
from tkinter import *
from tkinter import messagebox

root = tk.Tk()
root.title('我是窗口')
root.geometry('500x300+200+200')


class Application(Frame):
    def 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值