目录

代码演示

经典GUI面向编程

常见控件

控件对象属性设置方法

lable标签

输入控件Entry

Text多行文本框

单(复)选框

画布Canvas

布局管理器

grid布局管理器

pack布局管理器

place布局管理器

事件对象

鼠标和键盘事件

event对象常用属性


Tkinter

tkinter (Tk interface)是Python的标准GUI库,支持跨平台的GUI程序开发。tkinter 适合小型的GUI程序编写,特别适合初学者学习GUI编程。

Python GUI 编程(Tkinter) | 菜鸟教程

Python Tkinter-Python 手册 - Python学习网

tkinter —— Tcl/Tk 的 Python 接口 — Python 3.10.1 文档

Python Qt图像界面编程_北冥有鱼的博客-CSDN博客

wxPython

wxPython是比较流行的GUI库,适合大型应用程序开发,功能强于tkinter,整体设计框架类似于MFC(Microsoft Foundation Classes微软基础类库)。

代码演示

from tkinter import *
from tkinter import messageboxroot = Tk()  # 创建窗口对象
root.title('窗口1')  # 定义窗口的标题
root.geometry('500x300+300+200')  # 定义窗口显示大小和显示位置
but1 = Button(root)  # 创建一个按钮对象
but1['text'] = '点我☞'
but1.pack()def click(event):name = '《节妇吟·寄东平李司空师道》'text = '''《节妇吟·寄东平李司空师道》——唐·张籍君知妾有夫,赠妾双明珠。感君缠绵意,系在红罗襦。妾家高楼连苑起,良人执戟明光里。知君用心如日月,事夫誓拟同生死。还君明珠双泪垂,恨不相逢未嫁时。'''messagebox.showinfo(name, text)  # 参数:弹窗标题,内容but1.bind('<1>', click)
root.mainloop()  # 调用mainloop()组件,进行事件循环

主窗口位置和大小:通过geometry('wx±x±y')进行设置。w为宽度, h为高度。+x表示距屏幕左边的距离; -x 表示距屏幕右边的距离; +y表示距屏幕上边的距离;-y表示距屏幕下边的距离。

经典GUI面向编程

# tk.py
from tkinter import *
from tkinter import messagebox
from tk import shiciclass App(Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.createWidget()def createWidget(self):'''创建组件:return:'''# 创建一个按钮组件but1 = Button(self)but1['text'] = '点我☞'but1['command'] = self.shicibut1.pack()def shici(self):text = shici.shici['《节妇吟·寄东平李司空师道》']messagebox.showinfo('《节妇吟·寄东平李司空师道》', '《节妇吟·寄东平李司空师道》\n' + text)if __name__ == '__main__':root = Tk()root.title('demo')root.geometry('500x300+300+200')t = App(master=root)root.mainloop()t.createWidget()# shici.py
shici = {'《节妇吟·寄东平李司空师道》':'\t\t\t——唐·张籍\n君知妾有夫,赠妾双明珠。\n感君缠绵意,系在红罗襦。\n妾家高楼连苑起,良人执戟明光里。''\n知君用心如日月,事夫誓拟同生死。\n还君明珠双泪垂,恨不相逢未嫁时。'
}

常见控件

控件对象属性设置方法

设置组件属性控制组件的各种状态,如:宽度、高度、颜色、位置等。设置的三种方法:

1.创建对象时,使用关键字参数:fd = Button(self, fg="red", bg= "blue")

2.创建对象后,使用字典索引方式:fd["fg"] = "red"  ; fd["bg"] = "blue"

3.创建对象后,使用config0方法:fd.config(fg="red", bg= "blue")

lable标签

标签属性

1. width,height:用于指定区域大小,如果显示是文本,则以单个英文字符大小为单位(一个汉字占2个字符位置);如果显示是图像,则以像素为单位。默认值是根据具体显示的内容动态调整。

2.font:指定字体和字体大小,如:font=(font_name,size)

3. image:显示在Label上的图像,目前tkinter只支持gif格式。

4.fg和bg:fg (foreground) :前景色、bg (background) :背景色

5. justify:针对多行文字的对齐,可设置justify属性,可选值"left"、"center" or "riaht"

from tkinter import *class App(Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.createWidget()def createWidget(self):# 1、创建一个退出按钮butQuit = Button(self, text='退  出', command=root.destroy)butQuit.pack(side='left')# 2、创建Lable组件Label(self, text='学习使我快乐\n不死不休\n不眠不止', width=50,height=8, bg='red', fg='blue', font=('华文新魏', 12)).pack()# 3、图片显示global photo  # 将photo声明成全局变量。如果是局部变量,本方法执行完毕后,图像对象销毁,窗口显示不出图像photo = PhotoImage(file='./img/logo.png')lable_img = Label(image=photo)lable_img.pack()if __name__ == '__main__':root = Tk()root.title('demo')root.geometry('500x300+300+200')t = App(master=root)root.mainloop()t.createWidget()

输入控件Entry

Entry用来接收一行字符串的控件。
如果用户输入的文字长度长于Entry控件的宽度时,文字会自动向后滚动。
如果想输入多行文本,需要使用Text 控件。

from tkinter import *
from tkinter import messageboxclass App(Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.createWidget()def createWidget(self):Label(self, text='用户名', font=('华文新魏', 15)).pack()password = Label(self, text='密  码', font=('华文新魏', 15))'''StringVar变量绑定到指定的组件StringVar变量的值发生变化,组件内容也变化;组件内容发生变化,StringVar变量的值也发生变化'''v1 = StringVar()self.um = Entry(self, textvariable=v1)self.um.pack()password.pack()v2 = StringVar()self.pd = Entry(self, textvariable=v2, show='·')self.pd.pack()Button(self, text='登     录', bg='#33ccff', command=self.login).pack()def login(self):username = self.um.get()password = self.pd.get()if username == 'jbb' and password == '123456':messagebox.showinfo('欢迎登录', '恭喜你登录成功!')else:messagebox.showinfo('欢迎登录', '对不起,您输入的用户名或密码错误,请重新登陆')if __name__ == '__main__':root = Tk()root.title('demo')root.geometry('500x800+300+200')t = App(master=root)root.mainloop()t.createWidget()

Text多行文本框

Text(多行文本框)主要用于显示多行文本,还可以显示网页链接,图片, HTML页面,甚至CSS样式表,添加组件等。因此,也常被当做简单的文本处理器、文本编辑器或者网页浏览器来使用。比如IDLE就是Text组件构成的。

''' 经典GUI程序——面向对象编程 '''
from tkinter import *
import webbrowserclass App(Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.createWidget()def createWidget(self):# 多行文本框'''indexes (索引)是用来指向Text组件中文本的位置,Text的组件索引也是对应实际字符之间的位置。行号以1开始,列号以0开始'''self.w1 = Text(self, width=50, height=12, bg='#ccccb3')self.w1.pack()self.w1.insert(1.0, '名句:\n')self.w1.insert(2.2, '好风凭借力,\n送我上青云')Button(self, text='插入内容', command=self.insertText).pack(side='left')Button(self, text='获取内容', command=self.returnText).pack(side='left')Button(self, text='插入图片', command=self.addImg).pack(side='left')Button(self, text='新增控件', command=self.addWidget).pack(side='left')Button(self, text='搜    索', command=self.testText).pack(side='left')def insertText(self):self.w1.insert(INSERT, '\n\t\t薛宝钗')  # INSERT表示在光标处插入内容self.w1.insert(END, '\n\t\t——《红楼梦》词句')  # END表示在末尾插入def returnText(self):print(self.w1.get(1.0, END))  # 参数:获取文本内容的位置(起始坐标)def addImg(self):global photophoto = PhotoImage(file='img/logo.png')self.w1.image_create(END, image=photo)def addWidget(self):bt = Button(self.w1, text='newWidget')self.w1.window_create(END, window=bt)def testText(self):self.w1.delete(1.0, END)self.w1.insert(INSERT, '12345\nabcde\n百度一下\n呵呵呵!')self.w1.tag_add('百度一下', 3.0, 3.4)self.w1.tag_config('百度一下', background='yellow', foreground='red', underline=True, font=('华文新魏', 15))self.w1.tag_bind('百度一下', '<1>', self.webshow)def webshow(self, event):webbrowser.open('http://www.baidu.com')if __name__ == '__main__':root = Tk()root.title('demo')root.geometry('500x300+300+200')t = App(master=root)root.mainloop()t.createWidget()

单(复)选框

单选框

    def createWidget(self):# 单选框Label(self, text='性别:').pack(side='left')self.v = StringVar()self.v.set('1')  # 设置默认选择值self.r1 = Radiobutton(self, text='男', value='1', variable=self.v).pack(side='left')self.r2 = Radiobutton(self, text='女', value='0', variable=self.v).pack(side='left')Button(self, text='确定', command=self.confirm).pack(side='left')def confirm(self):xb = '男' if self.v.get() == '1' else '女'messagebox.showinfo('性别选择结果', '你选择的性别是:%s' % xb)

复选框

    def createWidget(self):# 复选框Label(self, text='爱好:').pack(side='left')self.hobby1 = IntVar()self.hobby2 = IntVar()self.c1 = Checkbutton(self, text='旅游', variable=self.hobby1, onvalue=1, offvalue=0).pack(side='left')self.c1 = Checkbutton(self, text='读书', variable=self.hobby2, onvalue=1, offvalue=0).pack(side='left')Button(self, text='确定', command=self.cof).pack(side='left')def cof(self):ah1, ah2 = self.hobby1.get(), self.hobby2.get()if ah1 == 1:messagebox.showinfo('爱好', '说走就走\n\n快乐尽在脚下')elif ah2 == 1:messagebox.showinfo('爱好', '皓首穷经\n\n学不可须臾而离也')else:messagebox.showinfo('你的爱好是啥?', '呜呼哀哉!\n\n一个没有灵魂的人生')

画布Canvas

    def createWidget(self):self.canvas = Canvas(self,width = 500,height = 200,bg = 'yellow')self.canvas.pack()self.canvas.create_line(10,10,30,30,50,100)   # 画直线,每两组为一个点,形成点和点的连接形成线self.canvas.create_rectangle(40,60,90,90)   # 画矩形self.canvas.create_oval(50,50,150,150)    # 画(椭)圆global photophoto = PhotoImage(file='img/logo.png')self.canvas.create_image(200,200,image = photo)  # 添加图片

布局管理器

一个GUI应用程序必然有大量的组件,tkinter提供的布局管理器可组织、管理在父组件中子组件的布局方式。tkinter 提供了三种管理器: pack、 grid、 place。

grid布局管理器

grid表格布局,采用表格结构组织组件。子组件的位置由行和列的单元格来确定,并且可以跨行和跨列,从而实现复杂的布局。

pack布局管理器

pack按照组件的创建顺序将子组件添加到父组件中,按照垂直或者水平的方向自然排布。如果不指定任何选项,默认在父组件中自顶向下垂直添加组件。pack是代码量最少,最简单的一种,可以用于快速生成界面。

place布局管理器

place布局管理器可以通过坐标精确控制组件的位置,适用于一些布局更加灵活的场景。

事件对象

一个GUI应用整个生命周期都处在一个消息循环(event loop)中。它等待事件的发生,并作出相应的处理。

Tkinter提供了用以处理相关事件的机制。处理函数可被绑定给各个控件的各种事件。

widget.bind(event, handler)

如果相关事件发生,handler函数会被触发,事件对象event会传递给handler 函数。

鼠标和键盘事件

event对象常用属性

from tkinter import *root = Tk()
root.title()
root.geometry()
c = Canvas(root, width=100, height=200, bg='yellow')
c.pack()def eve(event):print(event.x, event.y)c.bind('<1>', eve)
root.mainloop()

python-GUI图形界面之Tkinter(常用控件、事件对象、布局管理)相关推荐

  1. Open3d图形界面之3D显示控件

    文章目录 SceneWidget 3D Label 相机与视角 SceneWidget SceneWidget是open3d用以展示三维内容的控件,功能极其强大.考虑到大家都已经受够了斯坦福兔子,今天 ...

  2. Python Tkinter 常用控件空间位置摆放

    几何管理 Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,以下是Tkinter公开的几何管理类:包.网格.位置. from Tkinter import*#初始化Tk() myWin ...

  3. tkinter常用控件

    放置 import tkinter as tk button.place(x=250, y=420, width=100, height=50) button.grid(row=0, column=0 ...

  4. Qt Creator 窗体控件自适应窗口大小布局

    常见的软件窗口大小改变(最大化.手动改变时)需要窗口的部件能够自适应布局,而在Qt的应用程序界面设计中,对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的.网上百度了很多,多数说的很含糊,还有 ...

  5. python tkinter Checkbutton控件

    本小节展示的是python tkinter Checkbutton控件 选择了那些Ckeckbutton控件选项则在label控件中显示出来 from tkinter import *#导入tkint ...

  6. 在 GUI 控件中使用布局和容器: CBOX 类

    目录 1. 介绍 2. 目标 3. 类 CBox 3.1. 布局样式 3.2. 计算控件之间的间隔 3.3. 对齐 3.4. 部件渲染 3.5. 部件大小调整 3.6. 递归渲染 4. 在对话框窗口里 ...

  7. C#常用控件的属性以及方法(转载)

    -----以前看别人的,保存了下来,但是忘了源处,望见谅. C#常用控件属性及方法介绍 目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichText ...

  8. DevExpress Winform 常用控件

    前言 DevExpress 控件的功能比较强大,是全球知名控件开发公司,对于开发 B/S 或 C/S 都非常出色,可以实现很炫且功能强大的效果. DevExpress Winform 常用控件是本人在 ...

  9. winform常用控件介绍

    winform常用控件介绍 1.窗体 1 2.Label 控件 3 3.TextBox 控件 4 4.RichTextBox控件 5 5.NumericUpDown 控件 7 6.Button 控件 ...

  10. 设计器的使用及常用控件

    设计器的使用及常用控件 文章目录 设计器的使用及常用控件 一.设计器 二.设计器中的常用控件 一.设计器 1.设计器的使用 2.通过代码操作ui文件 #include "mainwindow ...

最新文章

  1. linux一键优化脚本1.0
  2. Nginx-从零开始使用nginx实现反向代理及负载均衡
  3. 让iframe可编辑
  4. 性能测试工具比较:LoadRunner vs JMeter - 测试结果数据比较
  5. 将视图转为image_JavaScript二进制数组(2)TypedArray视图
  6. 【转】ON_MESSAGE使用方法
  7. 使用EFS加密文件的共享
  8. 190628每日一句
  9. 将像素图转换为矢量图
  10. 自动控制原理学习笔记(五)
  11. 校园内网服务器维修视频,怎么搭建校园高清视频直播系统
  12. PS去掉图片上反光的操作流程
  13. ffmpeg录制音频 命令行与C++实现
  14. 高分辨透射电镜(HRTEM)样品怎么制?看这一篇就够了
  15. Nvidia PhysX 学习文档1: Welcome to PhysX
  16. 点滴:日内交易规则参考
  17. mysql 数据快速删除
  18. 分布式 | dble 启动的时候做了什么之配置检测
  19. 联想计算机M.2固态银盘,自己如何安装M.2固态硬盘?台式机与笔记本电脑安装M.2 SSD图文教程...
  20. 编程5分钟,命名2小时:聊聊命名规范!

热门文章

  1. 麦吉尔商业与计算机科学,麦吉尔大学与UBC大学那个好考
  2. 关于unity 3d人物换装
  3. 划片机是芯片切割制造流程中一个重要的环节
  4. js鼠标单击和双击事件
  5. html5 鼠标双击,鼠标双击或触摸双击事件检测jQuery插件
  6. Android广告图片轮播控件banner
  7. Spring boot 集成 WebService(简单使用、文件上传下载)
  8. python排版_Python|图形排版
  9. UniApp 获取屏幕分辨率
  10. 线代 006 克拉默法则 线性方程组求解