草庐IT

Python之GUI编程

flag:卷王! 2023-04-09 原文

一、常用的GUI库

  1. Tkinter:tkinter(Tk interface)是Python的标准GUI库,支持跨平台的GUI程序开发,tkinter适合小型的GUI程序编写,也特别适合初学者学习GUI编程。
  2. wxPython:wxPython是比较流行的GUI库,适合大型应用程序开发,功能强宇tkinter,整体设计框架类似于MFC(Microsoft Foundation Classes  微软基础类库)
  3. PyQT:Qt是一种开源的GUI库,适合大型GUI程序开发,PyQT是Qt工具包标准的Python实现。我们也可以使用Qt Desginer 界面设计器快速开发GUI应用程序。

基于tkinter模块创建GUI程序包括如下4个核心步骤:

  1. 创建应用程序主窗口对象(也称:根窗口):通过类Tk的无参构造函数
  2. 在主窗口中,添加各种可视化组件,比如:按钮(Button)、文本框(Label)等。
  3. 通过几何布局管理器,管理组件的大小和位置
  4. 事件处理:通过绑定事件处理程序,响应用户操纵所触发的事件(比如:单击、双击等)

操作如下:

from tkinter import *
from tkinter import messagebox
root = Tk()
btn01=Button(root)
btn01["text"]="点我就送花"
btn01.pack()
def songhua(e):       #e就是事件对象
    messagebox.showinfo("Message","送你一朵玫瑰花")
    print("送你99朵玫瑰花")
btn01.bind("<Button-1>", songhua)
root.mainloop()       #调用组件的mainloop()方法,进入事件循环

二、主窗口位置和大小

通过geometry('wxh ±x ±y‘)进行设置。w为宽度,h为高度,+x表示距屏幕左边的距离,-x表示据屏幕右边的距离,+y表示距屏幕上边的距离,-y表示距屏幕下边的距离。

root = Tk()
root.title("我的第一个GUI程序")
root.geometry("500x300+100+200")

实验:测试GUI程序的类的对象:

"""测试一个经典的GUI程序的写法,使用面向对象的方式"""
from tkinter import *
from tkinter import messagebox
class Application(Frame):
    """一个经典的GUI程序的类的写法"""
    def __init__(self, master=None):
        super().__init__(master)      #super()代表的是父类的定义,而不是父类对象
        self.master=master
        self.pack()
        self.createWidget()
    def createWidget(self):
        """创建组件"""
        self.btn01 = Button(self)
        self.btn01["text"] = "点击送花"
        self.btn01.pack()
        self.btn01["command"] =self.songhua
        # 创建一个退出按钮
        self.btnQuit= Button(self, text="退出", command=root.destroy)
        self.btnQuit.pack()
    def songhua(self):
        messagebox.showinfo("送花","送你99朵玫瑰花")
root=Tk()
root.geometry("400x100+200+300")
root.title("一个经典的GUI程序类的测试")
app = Application(master=root)
root.mainloop()

三、label标签

Label(标签)主要用于显示文本信息,也可以显示图像

Label(标签)有这些常见的属性:

  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“和”right"

四、Options选项详解

  1. 创建对象时,使用命名参数(也叫关键字参数)

 fred=Button(self, fg="red", bg="blue")

     2.创建对象后,使用字典索引方式

fred["fg"]= "red" 

fred["bg"] = "blue"

    3. 创建对象后,使用 config()方法

fred.config(fg="red", bg="blue")

五、 Button

Button(按钮)用来执行用户的单击操作,Button可以包含文本,也可以包含图像,按钮被单击后会自动调用对应事件绑定的方法。

六、Entry单行文本框

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

"""测试Entry组件的基本用法,使用面向对象的方式"""
from tkinter import *
from tkinter import messagebox
class Application(Frame):
    """一个经典的GUI程序的类的写法"""
    def __init__(self, master=None):
        super().__init__(master)      #super()代表的是父类的定义,而不是父类对象
        self.master=master
        self.pack()
        self.createWidget()
    def createWidget(self):
        """创建登录界面的组件"""
        self.label01 = Label(self,text="用户名")
        self.label01.pack()
        #StringVar变量绑定到指定的组件
        #StringVar变量的值发生变化,组件内容也变化
        #组件内容发生变化,StringVar变量的值也发生变化。
        v1=StringVar()
        self.entry01=Entry(self,textvariable=v1)
        self.entry01.pack()
        v1.set("admin")
        print(v1.get());print(self.entry01.get())
        #创建密码框
        self.label02=Label(self,text="密码")
        self.label02.pack()

        v2 = StringVar()
        self.entry02 = Entry(self, textvariable=v2,show="*")
        self.entry02.pack()
        Button(self,text="登录",command=self.login).pack()
    def login(self):
        print("用户名:"+self.entry01.get())
        print("密码:" + self.entry02.get())
        messagebox.showinfo("学习系统","登录成功!欢迎开始学习!")
if __name__=='__main__':
    root = Tk()
    root.geometry("400x130+200+300")
    app=Application(master=root)
    root.mainloop()

七、Text多行文本框

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

八、Radiobutton单选按钮与Checkbutton复选按钮

Radiobutton控件用于选择同一组单选按钮中的一个。Radiobutton可以显示文本,也可以显示图像。

Checkbutton控件用于选择多个按钮的情况。Checkbutton可以显示文本,也可以显示图像。

九、canvas画布

canvas(画布)是一个矩形区域,可以放置图形,图像,组件等。

十、布局管理器

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

grid()方法提供的选项

选项说明取值范围
column单元格的列号从0开始的正整数
columnspan跨列,跨越的列数正整数
row单元格的行号从0开始的正整数
rowspan跨行,跨越的行数正整数
ipadx、ipady设置子组件之间的间隔,x方向或者y方向,默认单位为像素非负浮点数,默认0.0
padx、pady与之并列的组件之间的间隔,x方向或者y方向,默认单位为像素非负浮点数,默认0.0
sticky组件紧贴所在单元格的某一角,对应于东南西北中以及4个角“n“,”s“,”w“,”e“,”nw“,”sw“,”se“,”ne“,”center“(默认)

有关Python之GUI编程的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  3. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  4. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  5. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  6. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  7. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  8. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  9. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  10. Python 刷Leetcode题库,顺带学英语单词(31) - 2

    ValidPalindromeGivenastring,determineifitisapalindrome,consideringonlyalphanumericcharactersandignoringcases. [#125]Example:"Aman,aplan,acanal:Panama"isapalindrome."raceacar"isnotapalindrome.Haveyouconsiderthatthestringmightbeempty?Thisisagoodquestiontoaskduringaninterview.Forthepurposeofthisproblem

随机推荐