精华内容
下载资源
问答
  • 老师叫我加界面设计,怎么弄写界面的话可以有两种方式,一种是GUI方式,可以使用tk或者QT之类的还有一种就是使用WEB方式,做一个HTML的界面,可以使用简单的flask来做python怎么使用qtdesigner设计的ui软硬件OS X EI...

    用python写爬虫,老师叫我加界面设计,怎么弄

    写界面的话可以有两种方式,一种是GUI方式,可以使用tk或者QT之类的

    还有一种就是使用WEB方式,做一个HTML的界面,可以使用简单的flask来做

    python怎么使用qtdesigner设计的ui

    软硬件

    OS X EI Capitan

    Python 3.5.1

    PyQt 5.5.1

    PyCharm 5.0.1

    前言

    在PyQt5系列教程的篇h50218157,我们已经搭建开发环境,今天,我们就用Python开发第一个Qt GUI程序,让大家感受下Qt开发的魅力,熟悉下Qt开发GUI程序的一般流程。

    制作程序UI界面,一般会有2种方法,利用UI制作工具和纯代码编写,像移动开发中的Android和iOS都是这样,在PyQt5中,我们也有这么2种方式。

    QtDesigner工具简介

    QtDesigner是专门用来制作Qt程序UI界面的工具,它使用起来非常简单,只要通过拖拽和点击就可以完成复杂的界面设计,而且还可以随时预览查看效果图。

    其中,区域1是UI界面制作导向,QtDesigner为我们提供了一些常用模块,非常方便;区域2是UI控件列表;区域3是控件属性列表;区域4是Action Editor编辑列表;区域5信号和槽的编辑列列表;区域6是资源处理窗口。

    第一个PyQt5程序

    说了这么多,还不如来动手实践一下。

    这个是我们第一个PyQt5项目的界面效果图,需要实现的是当点击界面上的按钮时,弹出一个提示框,提示框内显示一串文字。

    好了,目标定好了,马上开始去实现它。

    QtDesigner设计UI

    创建一个基于Main Window模块的UI文件,取名叫firstPyQt5.ui。从Widget Box中找到(也可以)Push Button,将它拖拽到工作空间里,调整位置,在Button上输入文字,调整字体及大小,这些都可以在Property Editor里操作。按钮点击弹框的操作会牵出Qt里非常重要的一对概念,即信号和槽(signal and slot),关于这个我打算再开博文细讲。现在你只需要知道slot就是一个函数,如果一个signal和一个slot绑定以后,那么signal被触发,slot就会被执行。

    那么问题来了,怎么在QtDesigner里绑定signal和slot呢?打开菜单栏里的Edit—>Edit Signals/Slots,然后光标移到按钮上点击拖拽,这时会弹出一个编辑框

    因为是点击,所以signal选择clicked(),slot函数现在还没有,我们就点击Edit新建一个,叫firstPyQt5_button_click()

    为了演示一下资源文件的使用,这里导入两张图片,一张给主窗口,另一张给帮助菜单项里的Action。

    在QtDesigner引用资源文件之前,需要先准备一个qrc文件,它跟xml文件比较类似,用来制定资源文件的路径qt.png

    penguin.jpg

    接下来就可以在QtDesigner的Resource Browser里倒入qrc文件,这样qrc文件中描述的资源就可以使用了

    将firstPyQt5.ui转换成python代码

    非常简单,通过Qt提供的命令行工具pyuic5就可以轻松实现pyuic5 -o firstPyQt5.py firstPyQt5.ui

    创建PyCharm工程

    新建一个新的python文件main.py,代码如下# -*- coding: utf-8 -*-

    __author__ = "djstava@gmail.com"

    import sys

    from PyQt5.QtWidgets import QApplication , QMainWindow

    from firstPyQt5 import *

    if __name__ == "__main__":

    """

    主函数

    """

    app = QApplication(sys.argv)

    mainWindow = QMainWindow()

    ui = Ui_mainWindow()

    ui.setupUi(mainWindow)

    mainWindow.show()

    sys.exit(app.exec_())

    接下修改下firstPyQt5.py文件,主要是去实现slot函数,因为之前在QtDesigner里没有实现,让它弹出一个消息框def firtPyQt5_button_click(self):

    QtWidgets.QMessageBox.information(self.pushButton,"标题","这是第一个PyQt5 GUI程序")

    最后运行下工程

    这里一般将ui文件单独存成一个文件,便于更新。

    python图形化界面设计tkinter

    python提供了多个开发界面的库个常用Python GUI库如下:

    Tkinter: Tkinter模块("Tk 接口")Python的标准Tk GUI工具包口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.,Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

    wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能键全的 GUI 用户界面。

    Jython:Jython程序可以和Java无缝集成。除了一些标准模块,Jython使用Java的模块。Jython几乎拥有标准的Python中不依赖于C语言的全部模块。比如,Jython的用户界面将使用Swing,AWT或者SWT。Jython可以被动态或静态地编译成Java字节码。

    Tkinter 编程

    Tkinter 是Python的标准GUI库。Python使用Tkinter可以快速的创建GUI应用程序。

    由于Tkinter是内置到python的安装包中、只要安装好Python之后就能import Tkinter库、而且IDLE也是用Tkinter编写而成、对于简单的图形界面Tkinter还是能应付自如。

    创建一个GUI程序

    1、导入Tkinter模块

    2、创建控件

    3、指定这个控件的master, 即这个控件属于哪一个

    4、告诉GM(geometry manager)有一个控件产生了。

    实例:1 #!/usr/bin/python2 # -*- coding: UTF-8 -*-3 4 import Tkinter5 top = Tkinter.Tk()6 # 进入消息循环7 top.mainloop()

    实例2:1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3  4 from Tkinter import *           # 导入 Tkinter 库 5 root = Tk()                     # 创建窗口对象的背景色 6                                 # 创建两个列表 7 li     = ["C","python","php","html","SQL","java"] 8 movie  = ["CSS","jQuery","Bootstrap"] 9 listb  = Listbox(root)          #  创建两个列表组件10 listb2 = Listbox(root)11 for item in li:                 # 第一个小部件插入数据12     listb.insert(0,item)13 14 for item in movie:              # 第二个小部件插入数据15     listb2.insert(0,item)16 17 listb.pack()                    # 将小部件放置到主窗口中18 listb2.pack()19 root.mainloop()                 # 进入消息循环

    Tkinter 组件

    Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。

    目前有15种Tkinter的部件。我们提出这些部件以及一个简短的介绍,在下面的表:

    控件

    描述

    Button    按钮控件;在程序中显示按钮。

    Canvas    画布控件;显示图形元素如线条或文本

    Checkbutton    多选框控件;用于在程序中提供多项选择框

    Entry    输入控件;用于显示简单的文本内容

    Frame    框架控件;在屏幕上显示一个矩形区域,多用来作为容器

    Label    标签控件;可以显示文本和位图

    Listbox    列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户

    Menubutton    菜单按钮控件,由于显示菜单项。

    Menu    菜单控件;显示菜单栏,下拉菜单和弹出菜单

    Message    消息控件;用来显示多行文本,与label比较类似

    Radiobutton    单选按钮控件;显示一个单选的按钮状态

    Scale    范围控件;显示一个数值刻度,为输出限定范围的数字区间

    Scrollbar    滚动条控件,当内容超过可视化区域时使用,如列表框。.

    Text    文本控件;用于显示多行文本

    Toplevel    容器控件;用来提供一个单独的对话框,和Frame比较类似

    Spinbox    输入控件;与Entry类似,但是可以指定输入范围值

    PanedWindow    PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。

    LabelFrame    labelframe 是一个简单的容器控件。常用与复杂的窗口布局。

    tkMessageBox    用于显示你应用程序的消息框。

    标准属性

    标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。

    属性    描述

    Dimension    控件大小;

    Color    控件颜色;

    Font    控件字体;

    Anchor    锚点;

    Relief    控件样式;

    Bitmap    位图;

    Cursor    光标;

    几何管理

    Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,一下是Tkinter公开的几何管理类:包、网格、位置

    几何方法    描述

    pack()    包装;

    grid()    网格

    place()    位置

    python中的哪个用户界面设计程序能实现这个功能

    你的要求难点不在于1秒,而在于你没有多思路:

    1、开线程做界面(什都好,tkinter,pyqt,甚至pygame)

    2、再开一个线程计算你的业务逻辑

    就tkinter而言,你可以搜索关键词:tkinter 多线程

    给你随便找了个示例代码:

    python-Python关于Tkinter的多线程问题——CSDN问答频道

    你看看能不能给你解惑。

    给你一个简陋的多线程,你感受一下:

    import threading

    class show(threading.Thread):

    def __init__(self):

    threading.Thread.__init__(self)

    def run(self):

    print("这里插入展示数据的代码")

    class ui(threading.Thread):

    def __init__(self):

    threading.Thread.__init__(self)

    def run(self):

    print("这里插入ui代码:root.mainloop()")

    if __name__=="__main__":

    theui = ui()

    zheshow = show()

    theui.start()

    zheshow.start()

    我刚才试了一下,似乎tkinter必须是在主进程里面,那么代码要调整一下,把ui放到主进程代码里面:

    # -*- coding: utf-8 -*-

    from tkinter import *

    import threading

    import time

    class show(threading.Thread):

    def __init__(self):

    threading.Thread.__init__(self)

    self.TextA = TextA

    self.TextB = TextB

    self.TextC = TextC

    def run(self):

    LabelVar1.set("1")

    time.sleep(1)

    LabelVar2.set("2")

    time.sleep(1)

    LabelVar3.set("3")

    time.sleep(1)

    def PrintText():

    theshow = show()

    theshow.start()

    if __name__=="__main__":

    ListA = ["a", "b", "c", "d"]

    ListB = ["A", "B", "C"]

    ListC = ["1", "2", "3"]

    TextA = ListA[0]

    TextB = ListB[0]

    TextC = ListC[0]

    root = Tk()

    root.title("Program")

    root["background"] ="gray"

    LabelVar1 = StringVar()

    LabelVar1.set(TextA)

    Frame1 = Frame(root)

    Frame1.place(x=0, y=0, width=100, height=50)

    Label1 = Label(Frame1, textvariable=LabelVar1, anchor="w")

    Label1.pack(side=LEFT)

    LabelVar2 = StringVar()

    LabelVar2.set(TextB)

    Frame2 = Frame(root)

    Frame2.place(x=0, y=50, width=100, height=50)

    Label2 = Label(Frame2, textvariable=LabelVar2, anchor="w")

    Label2.pack(side=LEFT)

    LabelVar3 = StringVar()

    LabelVar3.set(TextC)

    Frame3 = Frame(root)

    Frame3.place(x=0, y=100, width=100, height=50)

    Label3 = Label(Frame3, textvariable=LabelVar3, anchor="w")

    Label3.pack(side=LEFT)

    Frame_I = Frame(root)

    Frame_I.place(x = 100, y = 0, width=100, height=70)

    Button_I = Button(Frame_I, text = "Button" , width = 100, height=70, command = PrintText)

    Button_I.place(x=0, y=0)

    Button_I.grid(row=0, column=0, sticky=W, pady=4)

    Button_I.pack()

    root.mainloop()

    python写图形界面,用什么设计

    tk/tcl 有着广泛的应用,用户群体很。而且, tcl8 以后,做出来的 App 已经可以具备系生的效果了,不再是那种丑丑的界面。

    这个是 python 官方承认的标准 GUI 方案(官方说 “de-facto standard“,执行上的标准,我们还没承认?),资料也比较多,自行了解吧,这里只做备忘。

    版权声明:本站所有文章皆为原创,欢迎转载或转发,请保留网站地址和作者信息。

    展开全文
  • 本视频采用**Python 3.6版图形用户界面(Graphical User Interface,简称 GUI)编程对于某种计算机语言来说非常重要。可开发Python图形用户界面的工具包有多种。本课程介绍了Python图形用户界面编程技术——wxPython...

    本视频采用**Python 3.6版

    图形用户界面(Graphical User Interface,简称 GUI)编程对于某种计算机语言来说非常重要。可开发Python图形用户界面的工具包有多种。本课程介绍了Python图形用户界面编程技术——wxPython,其中包括wxPython安装、事件处理、布局管理、控件、高级窗口、菜单和工具栏。

    本课程内容:

    1 Python图形用户界面开发工具包

    2 wxPython安装

    3 wxPython基础

    3.1 wxPython类层次结构

    3.2 第一个wxPython程序

    3.3 wxPython界面构建层次结构

    4 事件处理

    4.1 一对一事件处理

    4.2 一对多事件处理

    4.3 示例:鼠标事件处理

    5 布局管理

    5.1 Box布局器

    5.2 StaticBox布局

    5.3 Grid布局

    5.4 FlexGrid布局

    6 wxPython控件

    6.1 静态文本和按钮

    6.2 文本输入控件

    6.3 复选框和单选按钮

    6.4 下拉列表

    6.5 列表

    6.6 静态图片控件

    7 高级窗口

    7.1 分隔窗口

    7.2 使用树

    7.3 使用网格

    8 使用菜单

    9 使用工具栏

    1524650829105686.jpg

    展开全文
  • Python-Tkinter图形化界面设计(详细教程

    万次阅读 多人点赞 2019-08-05 23:07:41
    Python 图形化界面设计 文章参考:https://www.jianshu.com/p/91844c5bca78 1、图形化界面设计的基本理解 当前流行的计算机桌面应用程序大多数为图形化用户界面(Graphic User Interface,GUI),即通过鼠标对菜单...

    声明:本篇文章为转载自https://www.jianshu.com/p/91844c5bca78,在原作者的基础上添加目录导航,旨在帮助大家以更高效率进行学习和开发。

    Python-Tkinter 图形化界面设计(详细教程)

    本文目录

    一.图形化界面设计的基本理解

    当前流行的计算机桌面应用程序大多数为图形化用户界面(Graphic User Interface,GUI),即通过鼠标对菜单、按钮等图形化元素触发指令,并从标签、对话框等图型化显示容器中获取人机对话信息。
    Python自带了tkinter 模块,实质上是一种流行的面向对象的GUI工具包 TK 的Python编程接口,提供了快速便利地创建GUI应用程序的方法。其图像化编程的基本步骤通常包括:

    ○ 导入 tkinter 模块
    ○ 创建 GUI 根窗体
    ○ 添加人机交互控件并编写相应的函数。
    ○ 在主事件循环中等待用户触发事件响应。

    二.窗体控件布局

    2.1. 数据集导入

    根窗体是图像化应用程序的根控制器,是tkinter的底层控件的实例。当导入tkinter模块后,调用 Tk()方法可初始化一个根窗体实例 root ,用 title() 方法可设置其标题文字,用geometry()方法可以设置窗体的大小(以像素为单位)。将其置于主循环中,除非用户关闭,否则程序始终处于运行状态。执行该程序,一个窗体就呈现出来了。在这个主循环的根窗体中,可持续呈现中的其他可视化控件实例,监测事件的发生并执行相应的处理程序。下面是根窗体呈现示例:

    from tkinter import *
    root= Tk()
    root.title('我的第一个Python窗体')
    root.geometry('240x240') # 这里的乘号不是 * ,而是小写英文字母 x
    root.mainloop()
    

    在这里插入图片描述

    2.2. tkinter 常用控件

    返回目录

    常用控件:常用的10 多种,如下:
    在这里插入图片描述

    2.2.1 控件的共同属性

    返回目录

    在窗体上呈现的可视化控件,通常包括尺寸、颜色、字体、相对位置、浮雕样式、图标样式和悬停光标形状等共同属性。不同的控件由于形状和功能不同,又有其特征属性。在初始化根窗体和根窗体主循环之间,可实例化窗体控件,并设置其属性。父容器可为根窗体或其他容器控件实例。常见的控件共同属性如下表:
    在这里插入图片描述
    标签及常见属性示例:

    from  tkinter import *
    root = Tk()
    lb = Label(root,text='我是第一个标签',\
            bg='#d3fbfb',\
            fg='red',\
            font=('华文新魏',32),\
            width=20,\
            height=2,\
            relief=SUNKEN)
    lb.pack()
    root.mainloop()
    

    在这里插入图片描述
    其中,标签实例lb 在父容器root中实例化,具有代码中所示的text(文本)、bg(背景色)、fg(前景色)、font(字体)、width(宽,默认以字符为单位)、height(高,默认以字符为单位)和 relief(浮雕样式)等一系列属性。
    在实例化控件时,实例的属性可以“属性=属性值”的形式枚举列出,不区分先后次序。例如:“ text=‘我是第一个标签’ ”显示标签的文本内容,“bg=’#d3fbfb’”设置背景色为十六进制数RGB色 #d3fbfb等等。属性值通常用文本形式表示。
    当然如果这个控件实例只需要一次性呈现,也可以不必命名,直接实例化并布局呈现出来,例如:

    Label(root,text='我是第一个标签',font='华文新魏').pack()
    

    属性 relief 为控件呈现出来的3D浮雕样式,有 FLAT(平的)、RAISED(凸起的)、SUNKEN(凹陷的)、GROOVE(沟槽状边缘)和 RIDGE(脊状边缘) 5种。
    在这里插入图片描述

    2.3 控件布局

    返回目录

    控件的布局通常有pack()、grid() 和 place() 三种方法。
    pack和grid请参考:https://www.jianshu.com/p/91844c5bca78

    2.3.1 place()方法

    返回目录

    根据控件实例在父容器中的绝对或相对位置参数进行布局。其常用布局参数如下:
    x,y:控件实例在根窗体中水平和垂直方向上的其实位置(单位为像素)。注意,根窗体左上角为0,0,水平向右,垂直向下为正方向。
    relx,rely:控件实例在根窗体中水平和垂直方向上起始布局的相对位置。即相对于根窗体宽和高的比例位置,取值在0.0~1.0之间。
    height,width:控件实例本身的高度和宽度(单位为像素)。
    relheight,relwidth:控件实例相对于根窗体的高度和宽度比例,取值在0.0~1.0之间。

    利用place()方法配合relx,rely和relheight,relwidth参数所得的到的界面可自适应根窗体尺寸的大小。place()方法与grid()方法可以混合使用。如下例子:利用place()方法排列消息(多行标签)。
    在这里插入图片描述

    from tkinter import *
    root = Tk()
    root.geometry('320x240')
    
    msg1 = Message(root,text='''我的水平起始位置相对窗体 0.2,垂直起始位置为绝对位置 80 像素,我的高度是窗体高度的0.4,宽度是200像素''',relief=GROOVE)
    msg1.place(relx=0.2,y=80,relheight=0.4,width=200)
    root.mainloop()
    

    三、tkinter常见控件的特征属性

    3.1、文本输入和输出相关控件

    文本的输入与输出控件通常包括:标签(Label)、消息(Message)、输入框(Entry)、文本框(Text)。他们除了前述共同属性外,都具有一些特征属性和功能。

    ○ 3.1.1 标签(Label)和 消息(Message)

    返回目录

    除了单行与多行的不同外,属性和用法基本一致,用于呈现文本信息。值得注意的是:属性text通常用于实例在第一次呈现时的固定文本,而如果需要在程序执行后发生变化,则可以使用下列方法之一实现:1、用控件实例的configure()方法来改变属性text的值,可使显示的文本发生变化;2、先定义一个tkinter的内部类型变量var=StringVar() 的值也可以使显示文本发生变化。
    看下面的一个例子:制作一个电子时钟,用root的after()方法每隔1秒time模块以获取系统当前时间,并在标签中显示出来。
    方法一:利用configure()方法或config()来实现文本变化
    在这里插入图片描述

    import tkinter
    import time
    
    def gettime():
          timestr = time.strftime("%H:%M:%S") # 获取当前的时间并转化为字符串
          lb.configure(text=timestr)   # 重新设置标签文本
          root.after(1000,gettime) # 每隔1s调用函数 gettime 自身获取时间
    
    root = tkinter.Tk()
    root.title('时钟')
    
    lb = tkinter.Label(root,text='',fg='blue',font=("黑体",80))
    lb.pack()
    gettime()
    root.mainloop()
    

    方法二:利用textvariable变量属性来实现文本变化

    import tkinter
    import time
    
    def gettime():
          var.set(time.strftime("%H:%M:%S"))   # 获取当前时间
          root.after(1000,gettime)   # 每隔1s调用函数 gettime 自身获取时间
    
    root = tkinter.Tk()
    root.title('时钟')
    var=tkinter.StringVar()
    
    lb = tkinter.Label(root,textvariable=var,fg='blue',font=("黑体",80))
    lb.pack()
    gettime()
    root.mainloop()
    

    ○ 3.1.2 文本框(Text)

    文本框的常用方法如下:
    在这里插入图片描述
    上表位置的取值可为整数,浮点数或END(末尾),例如0.0表示第0列第0行
    如下一个例子: 每隔1秒获取一次当前日期的时间,并写入文本框中,如下:本例中调用 datetime.now()获取当前日期时间,用insert()方法每次从文本框txt的尾部(END)开始追加文本。
    在这里插入图片描述

    from tkinter import *
    import time
    import datetime
    
    def gettime():
           s=str(datetime.datetime.now())+'\n'
           txt.insert(END,s)
           root.after(1000,gettime)  # 每隔1s调用函数 gettime 自身获取时间
    
    root=Tk()
    root.geometry('320x240')
    txt=Text(root)
    txt.pack()
    gettime()
    root.mainloop()
    

    ○ 3.1.3 输入框(Entry)

    返回目录

    通常作为功能比较单一的接收单行文本输入的控件,虽然也有许多对其中文本进行操作的方法,但通常用的只有取值方法get()和用于删除文本的delete(起始位置,终止位置),例如:清空输入框为delete(0,END)

    3.2 按钮(Button)

    返回目录

    主要是为响应鼠标单击事件触发运行程序所设的,故其除控件共有属性外,属性command是最为重要的属性。通常,将按钮要触发执行的程序以函数形式预先定义,然后可以用一下两种方法调用函数。Button按钮的状态有:'normal','active','disabled'

    ○ 直接调用函数。参数表达式为“command=函数名”,注意函数名后面不要加括号,也不能传递参数。如下面的command=run1:
    ○ 利用匿名函数调用函数和传递参数。参数的表达式为“command=lambda”:函数名(参数列表)。例如下面的:"command=lambda:run2(inp1.get(),inp2.get())"。

    ○ 看下面的例子:1.从两个输入框去的输入文本后转为浮点数值进行加法运算,要求每次单击按钮产生的算是结果以文本的形式追加到文本框中,将原输入框清空。2.按钮方法一不传参数调用函数run1()实现,按钮“方法二”用lambda调用函数run2(x,y)同时传递参数实现。
    在这里插入图片描述

    from tkinter import *
    
    def run1():
         a = float(inp1.get())
         b = float(inp2.get())
         s = '%0.2f+%0.2f=%0.2f\n' % (a, b, a + b)
         txt.insert(END, s)   # 追加显示运算结果
         inp1.delete(0, END)  # 清空输入
         inp2.delete(0, END)  # 清空输入
    
    def run2(x, y):
         a = float(x)
         b = float(y)
         s = '%0.2f+%0.2f=%0.2f\n' % (a, b, a + b)
         txt.insert(END, s)   # 追加显示运算结果
         inp1.delete(0, END)  # 清空输入
         inp2.delete(0, END)  # 清空输入
    
    root = Tk()
    root.geometry('460x240')
    root.title('简单加法器')
    
    lb1 = Label(root, text='请输入两个数,按下面两个按钮之一进行加法计算')
    lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)
    inp1 = Entry(root)
    inp1.place(relx=0.1, rely=0.2, relwidth=0.3, relheight=0.1)
    inp2 = Entry(root)
    inp2.place(relx=0.6, rely=0.2, relwidth=0.3, relheight=0.1)
    
    # 方法-直接调用 run1()
    btn1 = Button(root, text='方法一', command=run1)
    btn1.place(relx=0.1, rely=0.4, relwidth=0.3, relheight=0.1)
    
    # 方法二利用 lambda 传参数调用run2()
    btn2 = Button(root, text='方法二', command=lambda: run2(inp1.get(), inp2.get()))
    btn2.place(relx=0.6, rely=0.4, relwidth=0.3, relheight=0.1)
    
    # 在窗体垂直自上而下位置60%处起,布局相对窗体高度40%高的文本框
    txt = Text(root)
    txt.place(rely=0.6, relheight=0.4)
    
    root.mainloop()
    

    3.3 单选按钮

    返回目录

    (Radiobutton)是为了响应故乡排斥的若干单选项的单击事件以触发运行自定义函数所设的,该控件排除具有共有属性外,还具有显示文本(text)、返回变量(variable)、返回值(value)、响应函数名(command)等重要属性。响应函数名“command=函数名”的用法与Button相同,函数名最后也要加括号。返回变量variable=var通常应预先声明变量的类型var=IntVar()或var=StringVar(),在所调用的函数中方可用var.get()方法获取被选中实例的value值。例如下面:
    在这里插入图片描述

    from tkinter import *
    def Mysel():
          dic = {0:'甲',1:'乙',2:'丙'}
          s = "您选了" + dic.get(var.get()) + "项"
          lb.config(text = s)
    
    root = Tk()
    root.title('单选按钮')
    lb = Label(root)
    lb.pack()
    
    var = IntVar()
    rd1 = Radiobutton(root,text="甲",variable=var,value=0,command=Mysel)
    rd1.pack()
    
    rd2 = Radiobutton(root,text="乙",variable=var,value=1,command=Mysel)
    rd2.pack()
    
    rd3 = Radiobutton(root,text="丙",variable=var,value=2,command=Mysel)
    rd3.pack()
    
    root.mainloop()
    

    3.4 复选框

    返回目录

    (Checkbutton) 是为了返回多个选项值的交互控件,通常不直接触发函数的执行。该控件除具有共有属性外,还具有显示文本(text)、返回变量(variable)、选中返回值(onvalue)和未选中默认返回值(offvalue)等重要属性。返回变量variable=var 通常可以预先逐项分别声明变量的类型var=IntVar() (默认)或 var=StringVar(), 在所调用的函数中方可分别调用 var.get()方法 取得被选中实例的 onvalue或offvalue值。复选框实例通常还可分别利用 select()、deselect()和 toggle() 方法对其进行选中、清除选中和反选操作。

    ○ 如下的例子: 利用复选框实现,单击OK,可以将选中的结果显示在标签上。效果如下:

    在这里插入图片描述
    ○ 方法:利用函数中的 if-else 分支实现多项显示

    from tkinter import *
    import tkinter
    
    def run():
         if(CheckVar1.get()==0 and CheckVar2.get()==0 and CheckVar3.get()==0 and CheckVar4.get()==0):
             s = '您还没选择任何爱好项目'
         else:
             s1 = "足球" if CheckVar1.get()==1 else ""
             s2 = "篮球" if CheckVar2.get() == 1 else ""
             s3 = "游泳" if CheckVar3.get() == 1 else ""
             s4 = "田径" if CheckVar4.get() == 1 else ""
             s = "您选择了%s %s %s %s" % (s1,s2,s3,s4)
         lb2.config(text=s)
    
    root = tkinter.Tk()
    root.title('复选框')
    lb1=Label(root,text='请选择您的爱好项目')
    lb1.pack()
    
    CheckVar1 = IntVar()
    CheckVar2 = IntVar()
    CheckVar3 = IntVar()
    CheckVar4 = IntVar()
    
    ch1 = Checkbutton(root,text='足球',variable = CheckVar1,onvalue=1,offvalue=0)
    ch2 = Checkbutton(root,text='篮球',variable = CheckVar2,onvalue=1,offvalue=0)
    ch3 = Checkbutton(root,text='游泳',variable = CheckVar3,onvalue=1,offvalue=0)
    ch4 = Checkbutton(root,text='田径',variable = CheckVar4,onvalue=1,offvalue=0)
    
    ch1.pack()
    ch2.pack()
    ch3.pack()
    ch4.pack()
    
    btn = Button(root,text="OK",command=run)
    btn.pack()
    
    lb2 = Label(root,text='')
    lb2.pack()
    root.mainloop()
    

    3.5 列表框 与 组合框

    3.5.1 列表框

    返回目录

    (Listbox) 可供用户单选或多选所列条目以形成人机交互。列表框控件的主要方法见下面的表:
    在这里插入图片描述
    执行自定义函数时,通常使用“实例名.surselection()” 或 “selected” 来获取选中项的位置索引。由于列表框实质上就是将Python 的列表类型数据可视化呈现,在程序实现时,也可直接对相关列表数据进行操作,然后再通过列表框展示出来,而不必拘泥于可视化控件的方法。看下面的一个例子:实现列表框的初始化、添加、插入、修改、删除和清空操作,如下:
    在这里插入图片描述

    from tkinter import *
    def ini():
          Lstbox1.delete(0,END)
          list_items = ["数学","物理","化学","语文","外语"]
          for item in list_items:
               Lstbox1.insert(END,item)
    
    def clear():
          Lstbox1.delete(0,END)
    
    def ins():
          if entry.get() != '':
              if Lstbox1.curselection() == ():
                  Lstbox1.insert(Lstbox1.size(),entry.get())
              else:
                  Lstbox1.insert(Lstbox1.curselection(),entry.get())
    
    def updt():
          if entry.get() != '' and Lstbox1.curselection() != ():
               selected=Lstbox1.curselection()[0]
               Lstbox1.delete(selected)
               Lstbox1.insert(selected,entry.get())
    
    def delt():
          if Lstbox1.curselection() != ():
               Lstbox1.delete(Lstbox1.curselection())
    
    root = Tk()
    root.title('列表框实验')
    root.geometry('320x240')
    
    frame1 = Frame(root,relief=RAISED)
    frame1.place(relx=0.0)
    
    frame2 = Frame(root,relief=GROOVE)
    frame2.place(relx=0.5)
    
    Lstbox1 = Listbox(frame1)
    Lstbox1.pack()
    
    entry = Entry(frame2)
    entry.pack()
    
    btn1 = Button(frame2,text='初始化',command=ini)
    btn1.pack(fill=X)
    
    btn2 = Button(frame2,text='添加',command=ins)
    btn2.pack(fill=X)
    
    btn3 = Button(frame2,text='插入',command=ins) # 添加和插入功能实质上是一样的
    btn3.pack(fill=X)
    
    btn4 = Button(frame2,text='修改',command=updt)
    btn4.pack(fill=X)
    
    btn5 = Button(frame2,text='删除',command=delt)
    btn5.pack(fill=X)
    
    btn6 = Button(frame2,text='清空',command=clear)
    btn6.pack(fill=X)
    
    root.mainloop()
    

    3.5.2 组合框

    返回目录

    (Combobox) 实质上是带文本框的上拉列表框,其功能也将是Python 的列表类型数据可视化呈现,并提供用户单选或多选所列条目以形成人机交互。在图形化界面设计时,由于其具有灵活的界面,因此往往比列表框更受喜爱。但该控件并不包含在 tkinter 模块中,而是与 TreeView、Progressbar、Separator等控件一同包含在tkinter 的子模块ttk中。如果使用该控件,应先与from tkinter import ttk 语句引用ttk子模块,然后创建组合框实例: 实例名=Combobox(根对象,[属性列表])
    指定变量var=StringVar(),并设置实例属性 textvariable = var,values=[列表…]。组合框控件常用方法有:获得所选中的选项值get()和获得所选中的选项索引current()。
    看下面的一个例子:实现四则运算计算器,将两个操作数分别填入两个文本框后,通过选择组合框中的算法触发运算,如下:
    在这里插入图片描述

    from tkinter.ttk import *
    
    def calc(event):
           a = float(t1.get())
           b = float(t2.get())
           dic = {0:a+b,1:a-b,2:a*b,3:a/b}
           c = dic[comb.current()]
           lbl.config(text=str(c))
    
    root = Tk()
    root.title('四则运算')
    root.geometry('320x240')
    
    t1 = Entry(root)
    t1.place(relx=0.1,rely=0.1,relwidth=0.2,relheight=0.1)
    
    t2 = Entry(root)
    t2.place(relx=0.5,rely=0.1,relwidth=0.2,relheight=0.1)
    
    var = StringVar()
    
    comb = Combobox(root,textvariable=var,values=['加','减','乘','除',])
    comb.place(relx=0.1,rely=0.5,relwidth=0.2)
    comb.bind('<<ComboboxSelected>>',calc)
    
    lbl=Label(root,text='结果')
    lbl.place(relx=0.5,rely=0.7,relwidth=0.2,relheight=0.3)
    
    root.mainloop()
    

    3.6 滑块

    返回目录

    (Scale) 是一种 直观地进行数值输入的交互控件,其主要属性见下表:
    在这里插入图片描述
    滑块控件实例的主要方法比较简单,有 get()set(值),分别为取值和将滑块设在某特定值上。滑块实例也可绑定鼠标左键释放事件<ButtoonRelease-1>,并在执行函数中添加参数event来实现事件响应。
    例如:在一个窗体上设计一个200像素宽的水平滑块,取值范围为1.0~5.0,分辨精度为0.05,刻度间隔为 1,用鼠标拖动滑块后释放鼠标可读取滑块值并显示在标签上。效果如下:
    在这里插入图片描述

    from tkinter  import  *
    
    def show(event):
          s = '滑块的取值为' + str(var.get())
          lb.config(text=s)
    
    root = Tk()
    root.title('滑块实验')
    root.geometry('320x180')
    var=DoubleVar()
    scl = Scale(root,orient=HORIZONTAL,length=200,from_=1.0,to=5.0,label='请拖动滑块',tickinterval=1,resolution=0.05,variable=var)
    scl.bind('<ButtonRelease-1>',show)
    scl.pack()
    
    lb = Label(root,text='')
    lb.pack()
    
    root.mainloop()
    

    3.7 菜单

    返回目录

    (Menu)用于可视化地为一系列的命令分组,从而方便用户找到和触发执行这些命令。这里Menu所实例化别的主要是菜单,其通式为:

    菜单实例名=Menu(根窗体)
    菜单分组1=Menu(菜单实例名)
    菜单实例名.add_cascade(<label=菜单分组1 显示文本>,<menu=菜单分组1>)
    菜单分组1.add_command(<label=命令1文本>,<command=命令1函数名>)
    

    其中较为常见的方法有:add_cascade()add_command()add_separator(),分别用于添加一个菜单分组、添加一条菜单命令和添加一条分割线。
    利用Menu控件也可以创建快捷菜单(又称为上下文菜单)。通常需要右击弹出的控件实例绑定鼠标右击响应事件,并指向一个捕获event参数的自定义函数,在该自定义函数中,将鼠标的触发位置event.x_root 和 event.y_root以post()方法传给菜单。
    例子: 仿照window自带的“记事本”中的文件和编辑 菜单,实现在主菜单个快捷菜单上触发菜单命令,并相应改变窗体上的标签的文本内容。效果如下:
    在这里插入图片描述

    from tkinter import *
    
    def new():
         s = '新建'
         lb1.config(text=s)
    
    def ope():
         s = '打开'
         lb1.config(text=s)
    
    def sav():
         s = '保存'
         lb1.config(text=s)
    
    def cut():
         s = '剪切'
         lb1.config(text=s)
    
    def cop():
         s = '复制'
         lb1.config(text=s)
    
    def pas():
         s = '粘贴'
         lb1.config(text=s)
    
    def popupmenu(event):
         mainmenu.post(event.x_root,event.y_root)
    
    root = Tk()
    root.title('菜单实验')
    root.geometry('320x240')
    
    lb1 = Label(root,text='显示信息',font=('黑体',32,'bold'))
    lb1.place(relx=0.2,rely=0.2)
    
    mainmenu = Menu(root)
    menuFile = Menu(mainmenu)  # 菜单分组 menuFile
    mainmenu.add_cascade(label="文件",menu=menuFile)
    menuFile.add_command(label="新建",command=new)
    menuFile.add_command(label="打开",command=ope)
    menuFile.add_command(label="保存",command=sav)
    menuFile.add_separator()  # 分割线
    menuFile.add_command(label="退出",command=root.destroy)
    
    menuEdit = Menu(mainmenu)  # 菜单分组 menuEdit
    mainmenu.add_cascade(label="编辑",menu=menuEdit)
    menuEdit.add_command(label="剪切",command=cut)
    menuEdit.add_command(label="复制",command=cop())
    menuEdit.add_command(label="粘贴",command=pas())
    
    root.config(menu=mainmenu)
    root.bind('Button-3',popupmenu) # 根窗体绑定鼠标右击响应事件
    root.mainloop()
    

    3.8 子窗体

    返回目录

    用Toplevel可新建一个显示在最前面的子窗体,其通式为: 字体实例名=Toplevel(根窗体),子窗体与根窗体类似,也可设置title、geomerty等属性,并在画布上布局其他控件。如下的例子:在根窗体上创建菜单,触发创建一个新的窗体
    在这里插入图片描述

    from tkinter import *
    
    def newwind():
          winNew = Toplevel(root)
          winNew.geometry('320x240')
          winNew.title('新窗体')
          lb2 = Label(winNew,text='我在新窗体上')
          lb2.place(relx=0.2,rely=0.2)
          btClose=Button(winNew,text='关闭',command=winNew.destroy)
          btClose.place(relx=0.7,rely=0.5)
    
    root = Tk()
    root.title('新建窗体实验')
    root.geometry('320x240')
    
    lb1 = Label(root,text='主窗体',font=('黑体',32,'bold'))
    lb1.place(relx=0.2,rely=0.2)
    
    mainmenu = Menu(root)
    menuFile = Menu(mainmenu)
    mainmenu.add_cascade(label='菜单',menu=menuFile)
    menuFile.add_command(label='新窗体',command=newwind)
    menuFile.add_separator()
    menuFile.add_command(label='退出',command=root.destroy)
    
    root.config(menu=mainmenu)
    root.mainloop()
    

    关闭窗体程序运行的方法通常用 destory(),而不建议用 quit()。用Toplevel 所创建的子窗体是非模式(Modeless)的窗体,虽然初建时子窗体在最前面,但根窗体上的控件实例也是可以被操作的。

    3.9 模式对话框(Modal)

    返回目录

    是相对于前面介绍的非模式窗体而言的,所弹出的对话框必须应答,在关闭之前无法操作其后面的其他窗体。常见的模式对话框有消息对话框、输入对话框、文件选择对话框、颜色选择对话框等。

    3.9.1 交互对话框

    返回目录

    (一)、消息对话框: 引用 tkinter.messagebox 包,可使用消息对话框函数。执行这些函数,可弹出模式消息对话框,并根据用户的响应但会一个布尔值。其通式为:

    消息对话框函数(<title=标题文本>,<message=消息文本>,[其他参数])
    

    看下面的例子:单击按钮,弹出确认取消对话框,并将用户回答显示在标签中。效果如下:
    在这里插入图片描述

    from tkinter import *
    import tkinter.messagebox
    
    def xz():
        answer=tkinter.messagebox.askokcancel('请选择','请选择确定或取消')
        if answer:
            lb.config(text='已确认')
        else:
            lb.config(text='已取消')
    
    root = Tk()
    
    lb = Label(root,text='')
    lb.pack()
    btn=Button(root,text='弹出对话框',command=xz)
    btn.pack()
    root.mainloop()
    

    (二)、输入对话框: 引用tkinter.simpledialog包,可弹出输入对话框,用以接收用户的简单输入。输入对话框常用 askstring()、askfloat()和askfloat() 三种函数,分别用于接收字符串、整数和浮点数类型的输入。
    如下面的例子:单击按钮,弹出输入对话框,接收文本输入显示在窗体的标签上。如下:
    在这里插入图片描述

    from tkinter.simpledialog import *
    
    def xz():
        s=askstring('请输入','请输入一串文字')
        lb.config(text=s)
    
    root = Tk()
    
    lb = Label(root,text='')
    lb.pack()
    btn=Button(root,text='弹出输入对话框',command=xz)
    btn.pack()
    root.mainloop()
    

    3.9.2 文件选择对话框

    返回目录

    引用tkinter.filedialog包,可弹出文件选择对话框,让用户直观地选择一个或一组文件,以供进一步的文件操作。常用的文件选择对话框函数有 askopenfilename()、askopenfilenames()和asksaveasfilename(),分别用于进一步打开一个文件、一组文件和保存文件。其中,askopenfilename()和asksaveasfilenamme()函数的返回值类型为包含文件路径的文件名字符串,而askopenfilenames()函数的返回值类型为元组。
    例如:单击按钮,弹出文件选择对话框(“打开”对话框),并将用户所选择的文件路径和文件名显示在窗体的标签上。如下
    在这里插入图片描述

    from tkinter import *
    import tkinter.filedialog
    
    def xz():
        filename=tkinter.filedialog.askopenfilename()
        if filename != '':
             lb.config(text='您选择的文件是'+filename)
        else:
             lb.config(text='您没有选择任何文件')
    
    root = Tk()
    
    lb = Label(root,text='')
    lb.pack()
    btn=Button(root,text='弹出文件选择对话框',command=xz)
    btn.pack()
    root.mainloop()
    

    3.9.3、颜色选择对话框

    返回目录

    引用tkinter.colorchooser包,可使用 askcolor()函数弹出模式颜色选择对话框,让用户可以个性化地设置颜色属性。该函数的返回形式为包含RGB十进制浮点元组和RGB十六进制字符串的元组类型,例如:“((135.527343.52734375,167.65234375,186.7265625)),’#87a7ba’”。通常,可将其转换为字符串类型后,再截取以十六进制数表示的RGB颜色字符串用于为属性赋值。
    举例:单击按钮,弹出颜色选择对话框,并将用户所选择的颜色设置为窗体上标签的背景颜色,如下:
    在这里插入图片描述

    from tkinter import *
    import tkinter.colorchooser
    
    def xz():
        color=tkinter.colorchooser.askcolor()
        colorstr=str(color)
        print('打印字符串%s 切掉后=%s' % (colorstr,colorstr[-9:-2]))
        lb.config(text=colorstr[-9:-2],background=colorstr[-9:-2])
    
    root = Tk()
    
    lb = Label(root,text='请关注颜色的变化')
    lb.pack()
    btn=Button(root,text='弹出颜色选择对话框',command=xz)
    btn.pack()
    root.mainloop()
    

    四、事件响应

    返回目录

    用tkinter 可将用户事件与自定义函数绑定,用键盘或鼠标的动作事件来响应触发自定义函数的执行。其通式为:

    控件实例.bind(<事件代码>,<函数名>)
    

    其中,事件代码通常以半角小于号“<”和大于号“>” 界定,包括事件和按键等 2~3个部分,它们之间用减号分隔,常见事件代码见下表:
    在这里插入图片描述
    例如,将框架控件实例frame 绑定鼠标右键单击事件,调用自定义函数 myfunc()可表示为"frame.bind(’’,myfunc)",注意: myfunc后面没有括号。将控件实例绑定到键盘事件和部分光标不落在具体控件实例上的鼠标事件时,还需要设置该实例执行focus_set() 方法获得焦点,才能对事件持续响应。例如: frame.focus_set()。所调用的自定义函数若需要利用鼠标或键盘的响应值,可将event作为参数,通过event的属性获取。event的属性见下表:
    在这里插入图片描述
    在这里插入图片描述

    from tkinter import *
    
    def show(event):
    s=event.keysym
    lb.config(text=s)
    
    root=Tk()
    root.title('按键实验')
    root.geometry('200x200')
    lb=Label(root,text='请按键',font=('黑体',48))
    lb.bind('<Key>',show)
    lb.focus_set()
    lb.pack()
    root.mainloop()
    

    补充:

    五、背景图片

    1、添加背景

    返回目录

    #插入文件图片
    import tkinter as tk
    
    root = tk.Tk()
    
    #创建一个标签类, [justify]:对齐方式
    textLabel = tk.Label(root,text="你在右边会看到一个图片,\n我在换个行",
    justify = tk.LEFT)#左对齐
    textLabel.pack(side=tk.LEFT)#自动对齐,side:方位
    
     
    
    #创建一个图片管理类
    photo = tk.PhotoImage(file="18.png")#file:t图片路径
    imgLabel = tk.Label(root,image=photo)#把图片整合到标签类中
    imgLabel.pack(side=tk.RIGHT)#自动对齐
    
    
    tk.mainloop()
    

    在这里插入图片描述

    返回目录

    import tkinter as tk
    
    root = tk.Tk()
    
    
    #增加背景图片
    photo = tk.PhotoImage(file="背景.png")
    theLabel = tk.Label(root,
             text="我是内容,\n请你阅读",#内容
             justify=tk.LEFT,#对齐方式
             image=photo,#加入图片
             compound = tk.CENTER,#关键:设置为背景图片
             font=("华文行楷",20),#字体和字号
             fg = "white")#前景色
    theLabel.pack()
    
     
    
    tk.mainloop()
    

    在这里插入图片描述

    返回目录

    #插入文件图片
    import tkinter as tk
    
    root = tk.Tk()
    
    frame1 = tk.Frame(root)#这是上面的框架
    frame2 = tk.Frame(root)#这是下面的框架
    
    
    var = tk.StringVar()#储存文字的类
    var.set("你在右边会看到一个图片,\n我在换个行")#设置文字
    
    #创建一个标签类, [justify]:对齐方式,[frame]所属框架
    textLabel = tk.Label(frame1,textvariable=var,
             justify = tk.LEFT)#显示文字内容 
    textLabel.pack(side=tk.LEFT)#自动对齐,side:方位
    
     
    
    #创建一个图片管理类
    photo = tk.PhotoImage(file="18.png")#file:t图片路径
    imgLabel = tk.Label(frame1,image=photo)#把图片整合到标签类中
    imgLabel.pack(side=tk.RIGHT)#自动对齐
    
    
    def callback():#触发的函数
      var.set("你还真按了")#设置文字
    
    #[frame]所属框架 ,text 文字内容 command:触发方法
    theButton = tk.Button(frame2,text="我是下面的按钮",command=callback)
    theButton.pack()#自动对齐
    
     
    
    frame1.pack(padx=10,pady=10)#上框架对齐
    frame2.pack(padx=10,pady=10)#下框架对齐
    
    
    tk.mainloop()
    

    在这里插入图片描述
    在这里插入图片描述

    返回目录

    六、打开摄像头,显示

    效果:
    在这里插入图片描述
    代码:

      from tkinter import *
        import cv2
        from PIL import Image,ImageTk
        
        
        def take_snapshot():
            print("有人给你点赞啦!")
        
        def video_loop():
            success, img = camera.read()  # 从摄像头读取照片
            if success:
                cv2.waitKey(100)
                cv2image = cv2.cvtColor(img, cv2.COLOR_BGR2RGBA)#转换颜色从BGR到RGBA
                current_image = Image.fromarray(cv2image)#将图像转换成Image对象
                imgtk = ImageTk.PhotoImage(image=current_image)
                panel.imgtk1 = imgtk
                panel.config(image=imgtk)
                root.after(1, video_loop)
        
        camera = cv2.VideoCapture(0)    #摄像头
        
        root = Tk()
        root.title("opencv + tkinter")
        #root.protocol('WM_DELETE_WINDOW', detector)
        
        
        panel = Label(root)  # initialize image panel
        panel.pack(padx=10, pady=10)
        # root.config(cursor="arrow")
        btn = Button(root, text="点赞!", command=take_snapshot)
        btn.pack(fill="both", expand=True, padx=10, pady=10)
        
        video_loop()
        
        root.mainloop()
        # 当一切都完成后,关闭摄像头并释放所占资源
        camera.release()
        cv2.destroyAllWindows()
    

    感谢前辈:
    https://www.jianshu.com/p/91844c5bca78
    https://www.cnblogs.com/banzhen/p/7427201.html
    https://blog.csdn.net/a1_a1_a/article/details/79981788

    展开全文
  • Python从入门到实战 第十一章 图形用于界面第十一章 讲解主要内容11.1 初识图形用户界面11.2 tkinter开发包11.3 tkinter模块下基本组件11.4 ttk子模块下组件11.5 tix子模块下组件11.6 scrolledtext子模块下组件11.7 ...
  • Python用户界面设计(GUI)

    万次阅读 多人点赞 2020-06-27 22:07:47
    图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,已选择命令调用文件过执行其它一些日常任务与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,...

    1.概述:

           图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,已选择命令调用文件过执行其它一些日常任务与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形界面用户界面有许多优点,图形用户界面由窗口,下拉菜单对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相拥同的操作总是以同样的方式来完成。在图形用户界面,用户看到和操作的都是图形对象,应用的式计算及图形学的技术,GUI的广泛应用是当今计算机发展的重大成就之一,它极大地方便了非专业用户的使用,人们从此不再需要死记硬背大量的命令。

    2.认识tkinter:

           tkinter是python默认的GUI,它简单易用、可移植性良好,常被应用于小型图形界面应用程序的快速开发。
           tkinter可用于创建窗口、菜单、按钮、文本框等组件。是python的内置模块,使用时需提前导入。导入方式一:import tkinter;方式二:from tkinter import *

           开发一个简单的tkinter程序
           (1)创建根窗口:搭建图形界面之前,需要先创建一个根窗口(也称主窗口)。使用tkinter模块中TK类的构造方法可以创建根窗口对象。如果根窗口对象名为root,则令其等于Tk(),注意此时T是大写的。实现代码为:root=Tk()
           (2)进入消息主循环:为保证能随时接收用户消息,跟窗口应进入消息循环,使GUI程序总是处于运行状态。具体实现代码:root.mainloop()
           (3)总代码如下:

    from tkinter import *
    root=Tk()
    
    root.mainloop()
    
    

    运行结果如下图:
    在这里插入图片描述
    这样我们就创建了一个目前什么什么内容都没有的主界面,如果想调制页面大小见下方代码:

    from tkinter import *
    root=Tk()
    root.geometry("400x400+200+200")#对应的格式为宽乘以高加上水平偏移量加上垂直偏移量
    
    
    root.mainloop()
    

    运行结果如图:
    在这里插入图片描述
    3.标签组件

    (1)Label组件用于显示信息。Lable (master=None,cnf={},**kw)其中,kw参数是用来自定义label组件的键值对。
    常用属性如下图:
    在这里插入图片描述
    具体代码如下:

    from tkinter import *
    root=Tk()
    #定义lable对象用Lable方法,顺序分别为窗口对象,显示文本python程序设计,字体内型为华文行楷,大小为20
    #字体颜色为绿色,背景颜色为粉色
    label=Label(root,text="Python程序设计",font=("华文行楷",20),fg="green",bg="pink")
    
    label.pack()#调用pack方法将label标签显示在主界面,后面也会用到就不一一解释了
    
    
    root.mainloop()
    

    运行结果如下图:
    在这里插入图片描述
    4.Button属性

    (1)Button组件可展示文本或图片并与用户交互,使用Button类构造方法Button()可创建按钮对象。
    (2)Button组件的常用属性及其说明如下表所示:
    在这里插入图片描述
    Button组件在被创建时可使用command属性设置回调函数与按钮绑定,如此若用户对按钮进行操作,相应操作将被启动。具体操作如下:

    from tkinter import *
    root=Tk()
    def callback():
        print('**我想去看看**')
    button=Button(root,text='**世界那么大**',command=callback)
    button.pack()
    root.mainloop()
    

    按钮为世界那么大,当用户对按钮进行操作时,相应操作(也就是函数里面的内容将被启动)就会运行函数里面的内容然后输出** 我想去看看**,运行结果如下图:
    在这里插入图片描述
    点击一下按钮就会出现一行。
    5.文本框Entry

    (1)Entry用于接收单行文本信息,使用Entry类的构造方法Entry()可创建文本框对象。Entry组件的常用属性及说明如下表:
    在这里插入图片描述
    具体的实现如下:

    from tkinter import *
    root=Tk()
    data=StringVar()#创建可编数据data
    label=Label(root,textvariable=data)#创建label组件并将其与data关联
    label.pack()
    entry =Entry(root,textvariable=data)#创建labal组件并将其与data关联
    entry.pack()
    root.mainloop()
    

    运行结果如下图:
    在这里插入图片描述
    当我在文本框中输入什么内容,我图中圈的地方就会实时的显示什么内容。
    6.复选框Checkbutton

    (1)使用构造方法Checkbutton()可以创建复选框组件,复选框组件中包含多个选项,支持多选。
    (2)Checkbutton的常用选项如下表:
    在这里插入图片描述具体操作如下:

    from tkinter import *
    root=Tk()
    label=Label(root,text="请选择您爱好的球类运动:")
    label.pack()
    check_1=Checkbutton(root,text="足球",height=2,width=20,background="green").pack()
    check_2=Checkbutton(root,text="篮球",height=2,width=20,background="yellow").pack()
    check_3=Checkbutton(root,text="排球",height=2,width=20,background="pink").pack()
    check_4=Checkbutton(root,text="羽毛球",height=2,width=20,background="blue").pack()
    root.mainloop()
    
    

    运行结果如下图:
    在这里插入图片描述
    7.单选框Radiobutton

    (1)用于选中一组选项中的一个,与Checkbutton的区别在于一个选项被选中后就会自动清除其它选项的选中状态(说白了就是为了最终选中的只有一个选项)
    (2)Radiobutton的常用属性及说明如下表:
    在这里插入图片描述
    具体操作如下图:

    from tkinter import *
    root=Tk()#创建主窗口
    v=IntVar()#指定单选按钮选中时的变量
    langue=[('python',1),('VC++',2),('Java',3),('R',4)]
    label=Label (root,text="请选择你最喜欢的编程语言:").pack()
    for lang,num in langue:
        if(num==1):
            b=Radiobutton(root,text=lang,variable=v,value=num,background="green")
        elif(num==2):
            b=Radiobutton(root,text=lang,variable=v,value=num,background="red")
        elif(num==3):
            b=Radiobutton(root,text=lang,variable=v,value=num,background="orange")
        else:
            b=Radiobutton(root,text=lang,variable=v,value=num,background="green")
        b.pack(anchor=W)#这里是为了排版好看
    root.mainloop()
    
    

    运行结果如下图:
    在这里插入图片描述
    8.消息对话框(messagebox)

    (1)messagebox时候tkinter的一个子模块,它用来显示文本信息、提供警告信息或错误信息。
    类型有如下图所示:
    在这里插入图片描述
    使用以上消息框的同名法法可以创建相应消息框,这些消息框方法有相同的语法格式:messagebox.FunctionName(title,message[,options])
    其中:
    title是指定消息对话框的标题。
    message是消息框的文本消息。
    option 可以调整外观的选项。
    具体操作如下:

    from tkinter import *
    from tkinter.messagebox import *#导入messagebox子模块
    root=Tk()#创建主窗口
    def hello():
        showinfo("Hello","人生苦短,我喜欢Pyhon")#上面图片中有介绍
    button=Button(root,text="python程序设计",command=hello).pack()
    root.mainloop()
    
    

    运行结果如下图:
    在这里插入图片描述
    当点击按钮后就会弹出一个消息对话框。

    展开全文
  • 逛了一圈下来,总体上来说,python 图形界面有以下几个可行度比较高的解决方案。1. pyside为什么要把它写第一个呢?因为已经接触过 Qt,所以,总体来讲,感觉它更亲一点。没错,它就是 pyQt 的 LGPL 版本(Qt官方的...
  • 在本篇文章里小编给大家整理了关于Python图形用户界面和游戏开发知识点以及实例代码,需要的朋友们学习下。 基于tkinter模块的GUI GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,...
  • Python 图形化界面设计

    千次阅读 2019-10-25 13:57:40
    1、图形化界面设计的基本理解 当前流行的计算机桌面应用程序大多数为图形化用户界面(Graphic User Interface,GUI),即通过鼠标对菜单、按钮等图形化元素触发指令,并从标签、对话框等图型化显示容器中获取人机对话...
  • Python中Tkinter 图形化界面设计(详细教程

    千次阅读 多人点赞 2020-12-08 17:41:41
    Python-Tkinter 图形化界面设计(详细教程)一、图形化界面设计的基本理解二、 窗体控件布局2.1 根窗体呈现示例2.2 tkinter 常用控件2.2.1常用控件2.2.2 控件的共同属性2.3 控件布局2.3.1 place() 使用方法三、...
  • python3用户界面GUI编程之pyqt5教程

    千次阅读 2019-06-18 14:43:16
    pyqt5模块功能介绍 包括以下: QtCore:包含了核心的非GUI功能。... qtwidgets:模块包含创造经典桌面风格的用户界面提供了一套UI元素的类。 QtMultimedia:包含的类来处理多媒体内容和API来访问相机和收...
  • Python支持多种图形界面的第三方库,包括:TkwxWidgetsQtGTK等等。但是Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以直接使用。本章简单介绍如何使用Tkinter进行GUI编程。Tkinter我们来...
  • Python安装教程

    万次阅读 多人点赞 2021-03-10 14:23:10
    Python设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。 Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和...
  • 几个知名的编程语言排行榜索引已证明了Python在全球开发人员中的崛起。但是,以开发人员为中心的英国分析家SlashData现在已经对使用该...此外,Python具有从Web开发到桌面图形用户界面(GUI)的广泛应用程序。Python...
  • python应用系列教程——python的GUI界面编程Tkinter全解

    万次阅读 多人点赞 2017-10-27 14:50:28
    python的GUI界面编程,主要由Tkinter、Tix、tkMessageBox 几个库提供,当然有更新的更美观的库大家可以去搜索。在库中定义了一些基础控件对象,和组合控件对象。可以在创建控件时传递控件属性,也可以在创建了控件...
  • 作为Python开发者,你迟早都会用到图形用户界面来开发应用。本文将推荐一些 Python GUI 框架,希望对你有所帮助。Python 的 UI 开发工具包 Kivy(推荐学习:Python视频教程)Kivy是一个开源工具包能够让使用相同源...
  • Python 快速入门实战教程

    万次阅读 多人点赞 2018-04-17 23:30:03
    两年前,因项目需要,作者首次接触 Python,从此便一发不可收,基于 Python 完成了多个项目的开发。一路走来,深感书本与实践脱离之痛,市面上种类繁多的编程辅导书,大都力求面面俱到,动辄数百页,难免...
  • Python图形用户界面和游戏开发

    千次阅读 2019-07-10 15:50:33
    GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述。Python默认的GUI开发模块是tkinter(在Python 3以前的版本中名为Tkinter),从这个名字就可以看出它是基于Tk的...
  • 第1章Python语言快速入门11.1Python的安装与配置11.2运行Python程序21.2.1运行Python的方式21.2.2Python编写规范41.3编写简单的Python程序5习题19第2章Python语法速览10第1章Python语言快速入门11.1Python的安装与...
  • 第1章Python语言快速入门11.1Python的安装与配置11.2运行Python程序21.2.1运行Python的方式21.2.2Python编写规范41.3编写简单的Python程序5习题19第2章Python语法速览10第1章Python语言快速入门11.1Python的安装与...
  • Python GUI设计——tkinter菜鸟编程》是2019年8月电子工业...pythongui设计tkinter菜鸟编程电子版主要讲解如何在窗口内使用Python的内部模块tkinter设计图形用户接口(GUI)程序,使用户可以利用图形接口与计算机沟...
  • 1. 这本书对Python的知识点的描述很详细,而且排版看的很舒服. 2. 几个例题:假装自己从零开始学,将一些有代表性、有意思的例题抽取出来. 3. 还有自己对一部分课后复习题,全部课后上机实践题的解题思路
  • python tkinter制作用户登录界面

    万次阅读 多人点赞 2018-08-05 15:37:02
    学习一下莫烦Python的tkinter教程,根据教程制作了用户登录注册页。基本功能为检查登录、注册。清明上河图观看网址http://news.sohu.com/s2015/qmsht/index.shtml。 运行如下: ​​​​​​ 代码如下: ...
  • 作为Python开发者,你迟早都会用到图形用户界面来开发应用。本文将推荐一些 Python GUI 框架,希望对你有所帮助。Python 的 UI 开发工具包 Kivy(推荐学习:Python视频教程)Kivy是一个开源工具包能够让使用相同源...
  • Python GUI编程:界面设计(tkinter)

    千次阅读 2021-01-20 15:50:42
    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业...此篇文章介绍的是有关GUI(Graphical User Interface)图形用户界面设计。使用到的库是tkinter,tkinter库在python3版本开始就是自带的库,IDLE就
  • Python界面生成器wxFormBuilder简单使用入门教程

    万次阅读 多人点赞 2018-11-06 17:50:34
    python的桌面UI设计和处理,使用wxPython + wxFromBuilder是一个相对简单的方案。 1.下载 用pip install wxpython下载最新的wxPython。 2.下载wxfrombuilder wxFormBuilder下载链接,这个是直接用来拖拽用的。 ...
  • Python支持多种图形界面的第三方库,包括:TkwxWidgetsQtGTK等等。但是Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以直接使用。本章简单介绍如何使用Tkinter进行GUI编程。Tkinter我们来...
  • Python支持多种图形界面的第三方库,包括: Tk wxWidgets Qt GTK 等等。 但是Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以直接使用。本章简单介绍如何使用Tkinter进行GUI编程。 Tkinter...
  • 今天小编就为大家分享一篇python 实现GUI(图形用户界面)编程详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 Python支持多种图形界面的第三方库,包括: wxWidgets Qt GTK Tkinter: Tkinter...
  • 用户交互界面---python-PySimpleGUI库

    千次阅读 2021-03-10 15:26:07
    用户交互界面---python用户交互界面设计注意事项用户交互界面的设计过程关于用户界面的美化 用户交互界面设计注意事项 用户交互界面的设计过程 关于用户界面的美化
  • 本书共17章,内容包括Python环境搭建、数字类型与字符串、流程控制、列表与元组、集合和字典、函数、面向对象程序设计、模块开发、文件操作、错误和异常、正则表达式、图形用户界面、进程和线程、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,953
精华内容 7,981
关键字:

python用户界面设计教程

python 订阅