精华内容
下载资源
问答
  • python人机交互界面设计
    千次阅读
    2020-11-25 03:51:37

    GUI:人机交互图形化界面,图形页面窗口,Windows系统就是一个庞大的GUI界面,比命令行更加让人得以接受,使用更加简便

    在python中的GUI界面是由tkinter提供的,使用前需导入

    变量 = tk.Tk():创建一个窗口,将他实例化

    变量 = geometry('长宽'):设置窗口的长宽

    页面开发的最小内容:

    1.导入tkinter模块

    2.创建主窗口对象

    3.将主窗口对象加入消息循环

    importtkinter#创建主窗口对象

    root =tkinter.Tk()#设置窗口大小

    root.minsize(300,300)#加入一个按钮组件#创建一个按钮组件(在内存中创建)

    but = tkinter.Button(root,text = "按钮1")#摆放组件

    but = pack()

    组件的摆放方式:

    1.pack()方式 ——>方位/方向摆放

    2.gird()方式 ——>网格摆放方法

    3.place() ___>定位摆放方法

    pack()方式:

    side:设置组件相对于父组件的摆放位置

    ipadx,ipady :设置组件的内部间距

    padx,pady:设置多个组件之间的外部间距

    expand:设置side是否失效

    importtkinter#创建主窗口对象

    root =tkinter.Tk()#设置窗口大小

    root.minsize(300,300)#加入一个按钮组件#创建一个按钮组件(在内存中创建)

    but = tkinter.Button(root,text = "按钮1")#摆放组件

    but = pack(ipadx = 20)#创建组件2

    btn2 = tkinter.Button(root,text = '按钮2')

    btn2.pack(ipady= 20)

    创建一个按钮组件

    but3= tkinter.Button(root,text = "按钮3")#摆放组件

    but = pack(padx = 20)

    but5= tkinter.Button(root,text = "按钮5")

    but5.pack(fill= 'x',side = 'left')#该组件占据水平方向的最大位置

    but6 = tkinter.Button(root,text = "按钮6")

    but6.pack(expand= 'yes',fill = 'both')#让size失效

    gird()方式

    row 设置行数 默认为0

    column 设置列数 默认为0

    rowspan 设置跨列数量

    ipadx,ipady 设置组件内部间距

    importtkinter#创建主窗口对象

    root =tkinter.Tk()#设置窗口大小

    root.minsize(300,300)#加入一个按钮组件#创建一个按钮组件(在内存中创建)

    but = tkinter.Button(root,text = "按钮1")#摆放组件

    but.grid(row = 0,column = 0)#设置行为0列为0

    btn0 = tkinter.Button(root,text = '按钮0')

    btn0.grid(row=2,column = 0,columnspan = 2)#占据2行

    place()

    绝对定位:

    x:设置左上角水平长度+++++++单位像素

    y:设置距离左上角的垂直宽度

    width:设置组件所占据的宽度

    heigh:设置组件所占据的宽度

    importtkinter#创建主窗口对象

    root =tkinter.Tk()#设置窗口大小

    root.minsize(300,300)#加入一个按钮组件#创建一个按钮组件(在内存中创建)

    but = tkinter.Button(root,text = "按钮1")#摆放组件

    but = place(x = ?,y = ?,width = ?,heigh = ?)#距离x(距离左上角的水平距离)多少,对于y多少#单位像素#相对位置

    but= place(relx = ?,rely = ?,width = ?,heigh = ?)#距离x(距离左上角的百分比水平距离)多少,对于y多少#单位百分比

    相对定位:

    relx:设置左上角水平长度(取值0-1)

    rely:设置距离左上角的垂直宽度

    relwidth:设置组件所占据的宽度

    relheigh:设置组件所占据的宽度

    .geometry(?x?):设置界面大小

    button:

    bg:背景颜色

    fg:字体颜色

    选择框/复选框:Checkbutton

    importtkinter

    root=tkinter.Tk()#设置显示内容tkinter变量#设置内容

    text =tkinter.StringVar()

    text.set('文本')#设置复选框勾选与否的值

    result =tkinter.IntVar()deffunc():print(result.get())

    cheekbutton= tkinter.Checkbutton(root,textvariable = text,variable = result,command =func)

    root.mainloop()

    Frame:相对于一个容器,框架

    importtkinter

    root=tkinter.Tk()

    root.geometry("500x500")

    frame1= tkinter.Frame(root,bg = 'red',width = 500,height = 100)

    frame1.pack()

    frame2= tkinter.Frame(root,bg = 'green',width = 500,height = 100)

    frame2.pack()

    bun= tkinter.Button(frame1,text = '按钮')

    bun1= tkinter.Button(frame2,text = '按钮')

    bun2= tkinter.Button(frame1,text = '按钮')

    bun3= tkinter.Button(frame1,text = '按钮')

    bun.pack(side= 'left')

    bun2.pack(side= 'left')

    bun3.pack(side= 'left')

    bun1.pack()

    root.mainloop()

    LabelFrame:标签框架

    importtkinter

    root=tkinter.Tk()

    root.geometry("500x500")

    frame1= tkinter.LabelFrame(root,text = 'hahaha' ,bg = 'red',width = 500,height = 100)

    frame1.pack()

    frame2= tkinter.LabelFrame(root,bg = 'green',width = 500,height = 100)

    frame2.pack()

    bun= tkinter.Button(frame1,text = '按钮')

    bun1= tkinter.Button(frame2,text = '按钮')

    bun2= tkinter.Button(frame1,text = '按钮')

    bun3= tkinter.Button(frame1,text = '按钮')

    bun.pack(side= 'left')

    bun2.pack(side= 'left')

    bun3.pack(side= 'left')

    bun1.pack()

    root.mainloop()

    Label:标签

    importtkinter

    root=tkinter.Tk()

    root.geometry("500x500")

    label= tkinter.Label(root,text = "标签")

    label.pack()

    root.mainloop()

    listbox:列表盒子

    importtkinter

    root=tkinter.Tk()

    root.geometry("500x500")

    name= ("auy","hayaya","pox")

    std= tkinter.StringVar(value=name)

    listbox= tkinter.Listbox(root,listvariable =std)

    listbox.pack()

    root.mainloop()

    文本输入框:Entry

    importtkinter

    root =tkinter.Tk()

    entry = tkinter.Entry(root,width = 50)#width输入框的长度

    password = tkinter.Entry(root)#show代表遮盖符

    entry.pack()

    password.pack()

    root.mainloop()

    更多相关内容
  • python人机交互界面

    2022-04-16 19:32:28
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录1.加入背景图片显示界面代码2.设置背景颜色代码 提示:以下是本篇文章正文内容,下面...photo = tk.PhotoImage(file="D:\study\python.

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

    提示:以下是本篇文章正文内容,下面案例可供参考

    1.加入背景图片显示界面代码

    代码如下(示例):

    import tkinter as tk
    
    root = tk.Tk()
    root.title('0-1背包实例数据集算法平台')
    root.geometry('600x340')
    # 增加背景图片
    photo = tk.PhotoImage(file="D:\study\python\自学\project\代码\picture\背景0.jpeg")
    theLabel = tk.Label(root,
                        text="欢迎使用\n点击页面进入下一流程",  # 内容
                        justify=tk.CENTER,  # 对齐方式
                        image=photo,  # 加入图片
                        compound=tk.CENTER,  # 关键:设置为背景图片
                        font=("华文行楷", 20),  # 字体和字号
                        fg="black")  # 前景色
    theLabel.pack()
    tk.mainloop()
    
    
    • 结果显示
      请添加图片描述

    2.设置背景颜色代码

    代码如下(示例):

    from tkinter import *
    root = Tk()
    root.title('0-1背包实例数据集算法平台')
    root.geometry('700x340')
    bg='#d3fbfb'
    lb = Label(root,text='欢迎使用,点击进入下级界面',\
    
    bg='#d3fbfb',\
    
    fg='red',\
    
    font=('华文新魏',32),\
    
    width=700,\
    
    height=340,\
    
    relief=SUNKEN)
    
    lb.pack()
    
    root.mainloop()
    
    
    
    
    
    • 结果显示请添加图片描述
    展开全文
  • Python-Tkinter 图形化界面设计(详细教程)本文目录一.图形化界面设计的基本理解当前流行的计算机桌面应用程序大多数为图形化用户界面(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()

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    2.2. tkinter 常用控件

    常用控件:常用的10 多种,如下:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    2.2.1 控件的共同属性

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

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    标签及常见属性示例:

    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()

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    其中,标签实例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种。

    2019050322292620.

    2.3 控件布局

    控件的布局通常有pack()、grid() 和 place() 三种方法。

    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()方法排列消息(多行标签)。

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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()来实现文本变化。

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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)

    文本框的常用方法如下:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    上表位置的取值可为整数,浮点数或END(末尾),例如0.0表示第0列第0行

    如下一个例子: 每隔1秒获取一次当前日期的时间,并写入文本框中,如下:本例中调用 datetime.now()获取当前日期时间,用insert()方法每次从文本框txt的尾部(END)开始追加文本。

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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)同时传递参数实现。

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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值。例如下面:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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,可以将选中的结果显示在标签上。效果如下:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    ○ 方法:利用函数中的 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) 可供用户单选或多选所列条目以形成人机交互。列表框控件的主要方法见下面的表:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

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

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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()。

    看下面的一个例子:实现四则运算计算器,将两个操作数分别填入两个文本框后,通过选择组合框中的算法触发运算,如下:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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('<>',calc)

    lbl=Label(root,text='结果')

    lbl.place(relx=0.5,rely=0.7,relwidth=0.2,relheight=0.3)

    root.mainloop()

    3.6 滑块

    (Scale) 是一种 直观地进行数值输入的交互控件,其主要属性见下表:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    滑块控件实例的主要方法比较简单,有 get()和set(值),分别为取值和将滑块设在某特定值上。滑块实例也可绑定鼠标左键释放事件,并在执行函数中添加参数event来实现事件响应。

    例如:在一个窗体上设计一个200像素宽的水平滑块,取值范围为1.0~5.0,分辨精度为0.05,刻度间隔为 1,用鼠标拖动滑块后释放鼠标可读取滑块值并显示在标签上。效果如下:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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('',show)

    scl.pack()

    lb = Label(root,text='')

    lb.pack()

    root.mainloop()

    3.7 菜单

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

    菜单实例名=Menu(根窗体)

    菜单分组1=Menu(菜单实例名)

    菜单实例名.add_cascade(,

    菜单分组1.add_command(,)

    1

    2

    3

    4

    其中较为常见的方法有:add_cascade()、add_command()和add_separator(),分别用于添加一个菜单分组、添加一条菜单命令和添加一条分割线。

    利用Menu控件也可以创建快捷菜单(又称为上下文菜单)。通常需要右击弹出的控件实例绑定鼠标右击响应事件,并指向一个捕获event参数的自定义函数,在该自定义函数中,将鼠标的触发位置event.x_root 和 event.y_root以post()方法传给菜单。

    例子: 仿照window自带的“记事本”中的文件和编辑 菜单,实现在主菜单个快捷菜单上触发菜单命令,并相应改变窗体上的标签的文本内容。效果如下:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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等属性,并在画布上布局其他控件。如下的例子:在根窗体上创建菜单,触发创建一个新的窗体

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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 包,可使用消息对话框函数。执行这些函数,可弹出模式消息对话框,并根据用户的响应但会一个布尔值。其通式为:

    消息对话框函数(

    ,,[其他参数])

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

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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() 三种函数,分别用于接收字符串、整数和浮点数类型的输入。

    如下面的例子:单击按钮,弹出输入对话框,接收文本输入显示在窗体的标签上。如下:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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()函数的返回值类型为元组。

    例如:单击按钮,弹出文件选择对话框(“打开”对话框),并将用户所选择的文件路径和文件名显示在窗体的标签上。如下

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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颜色字符串用于为属性赋值。

    举例:单击按钮,弹出颜色选择对话框,并将用户所选择的颜色设置为窗体上标签的背景颜色,如下:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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(<事件代码>,<函数名>)

    1

    其中,事件代码通常以半角小于号“<”和大于号“>” 界定,包括事件和按键等 2~3个部分,它们之间用减号分隔,常见事件代码见下表:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    例如,将框架控件实例frame 绑定鼠标右键单击事件,调用自定义函数 myfunc()可表示为"frame.bind(’’,myfunc)",注意: myfunc后面没有括号。将控件实例绑定到键盘事件和部分光标不落在具体控件实例上的鼠标事件时,还需要设置该实例执行focus_set() 方法获得焦点,才能对事件持续响应。例如: frame.focus_set()。所调用的自定义函数若需要利用鼠标或键盘的响应值,可将event作为参数,通过event的属性获取。event的属性见下表:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    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('',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()

    20190805225326340.

    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()

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    #插入文件图片

    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()

    20190805225406829.

    20190805225411126.

    六、打开摄像头,显示

    效果:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

    代码:

    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()

    展开全文
  • python做一个gui

    千次阅读 2020-11-20 21:15:42
    本人是做接口测试的,而很多接口现在对于安全方面有了很大的重视,所以往往在接口层上做了一些加密,比如MD5、AES、SHA之类的加密,而每次加密,都是自己利用python编写脚本而...许多在学习如何创建一个 GUI 应用...

    本人是做接口测试的,而很多接口现在对于安全方面有了很大的重视,所以往往在接口层上做了一些加密,比如MD5、AES、SHA之类的加密,而每次加密,都是自己利用python编写脚本而生成sign值,这往往对于自己在工具效率上无法提高,所以就产生了自己编写一个简单的加密+请求接口的小工具的想法。

    因为本人现在主要是以python为主,所以在选择的时候,就从这方面入手。许多人在学习如何创建一个 GUI 应用的时候都感到十分的困难。其中最重要的原因是,他们不知道应该从何下手。大多数的教程都只有文字,但事实上仅仅依靠文字很难学会 GUI 编程,因为 GUI 应用大多数都是基于视觉上的。

    本篇文章,主要是分享下自己在编写这个小工具过程中的心得。做出来的效果如下:

    工具效果图

    做出来的虽然有点简陋,但是可以做为借鉴、完善,接下来就是工具制作的方法:

    1、Gui界面的制作

    首先要先安装python环境,然后再eric6,涉及到这些环境的安装可以自行百度去寻找方法,在此不会涉及到环境安装的方法,环境安装完成后,打开QT Designer(在eric6根目录下点击eric6.pyc或者在python根目录下点击打开eric.bat):

    QT Designer

    打开QT Designer后,选择Main Window,点击创建:

    创建Main Window

    创建好你的MainWindow后:

    MainWindow

    在MainWindow界面的右边QObject,那就是定义这个对象的名字的地方。这个名字将是我们通过 Python 代码调用到这个对象的变量名,所以请尽量取一个有意义的名称。

    设计完成你的界面后,点击保存,将会生成得到xxx.ui文件,这个文件可以通过cmd打开ui文件所在的路径,然后通过pyuic4 xx.ui > xx.py 可以得到xx.py文件:

    生成的py文件

    2、编写代码

    Qt 代码是面向对象的,并且简单易学。所有我们添加的组件都是一个对象,并且都拥有自己的方法比如toPlainText()(用来读取输入框中的值)。这让它使用起来非常方便。

    在你编写代码之前,你必须要使用一些函数来进行配置。可以通过官方的例程(以及网上的一些教程)中总结出了这一小段代码来进行配置。

    这些代码非常有用,每当你想要创建一个新的 PyQt 项目的时候,就在这段代码的基础上添加你自己的代码吧。

    这段代码如下:

    import sysfrom PyQt4 import QtCore, QtGui, uicqtCreatorFile = "" # Enter file here.Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)class MyApp(QtGui.QMainWindow, Ui_MainWindow):def __init__(self):QtGui.QMainWindow.__init__(self)Ui_MainWindow.__init__(self)self.setupUi(self)if __name__ == "__main__":app = QtGui.QApplication(sys.argv)window = MyApp()window.show()sys.exit(app.exec_())

    其中需要注意的是:

    qtCreatorFile = "" # Enter file here.

    你需要在这里填入你先前创建的文件的地址,即就是之前生成的ui文件。这个文件将会被内置的函数载入:

    Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)

    再看下这段代码:

    if __name__ == "__main__":app = QtGui.QApplication(sys.argv)window = MyApp()window.show()sys.exit(app.exec_())

    这段主程序创建了一个新的 Qt Gui 应用。,每个 QT 应用都可以通过命令行进行配置,所以必须传入sys.argv 参数。不过现在我们用不到这个。最后,我们创建了一个MyApp类,这个类继承于 Qt 库并且调用了父类的初始化函数:

    class MyApp(QtGui.QMainWindow, Ui_MainWindow):def __init__(self):QtGui.QMainWindow.__init__(self)Ui_MainWindow.__init__(self)self.setupUi(self)

    你不一定非得要了解这些代码的细节。你只需要在它的基础上继续开发就好了。

    但是最好不需要这样导入ui文件为前提下进行开发,而是直接生成py文件基础上进行开发,因为你后续还需要生成exe文件,至于怎样实现你的功能,这部分代码可以看看自己的需求了,怎么写就怎么写了:

    #此部分为生成的py文件代码self.label_21.setText(_translate("MainWindow", "sign:", None))self.label_22.setText(_translate("MainWindow", "bizContent:", None))self.request_button_form.setText(_translate("MainWindow", "Request", None))self.timestamp_select_3.setText(_translate("MainWindow", "11位时间戳", None))self.timestamp_select_4.setText(_translate("MainWindow", "年-月-日 时:分:秒", None))self.label_23.setText(_translate("MainWindow", "appSecret:", None))self.appSecret_input_form.setHtml(_translate("MainWindow", "gt\n""A1B2C3D4E5F6G7H8", None))self.label_24.setText(_translate("MainWindow", "result-output", None))self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "form模式", None))#此部分为自己实现组件功能的代码# AES加密class prpcrypt():def __init__(self, key,iv):self.key = keyself.iv=ivself.mode = AES.MODE_CBCdef encrypt(self, text):''' 根据key长度必须是16(AES-128),24(AES-192),32(AES-256)位 不足位数的,可以使用标准的PKCS填充字符 '''data =text+(AES.block_size - len(text) % AES.block_size) * chr(AES.block_size - len(text) % AES.block_size)cryptor = AES.new(self.key, self.mode, self.iv)self.ciphertext = cryptor.encrypt(data)return base64.b64encode(self.ciphertext)class MyApp(QtGui.QMainWindow, Ui_MainWindow):def __init__(self):QtGui.QMainWindow.__init__(self)Ui_MainWindow.__init__(self)self.setupUi(self)self.request_button.clicked.connect(self.CalculateTax)def CalculateTax(self):url = str(self.url_input.toPlainText()).strip(' ')appKey=(str(self.appkey_input.toPlainText())).strip(' ')# 获取content-tpye值,获取当前下拉框comboBox的值和当前的索引content_type_index = self.content_type_select.currentIndex() # 获取当前选择的索引值content_type_value = str(self.content_type_select.currentText()) # 获取当前选择的文本,Qstring类型print content_type_indexprint content_type_value

    以上为部分代码,只提供为参考

    self.request_button.clicked.connect(self.CalculateTax)

    这段代码有什么用?还记得我们把按钮命名为了calc_tax_button 吗?(这是这个按钮对象的名字,不是按钮上显示的提示字符串。)clicked 是一个内置的函数,当有按钮被点击的时候它会被自动调用(很神奇吧)。所有的 QT 组件都有特定的函数,你可以通过 Google 来查看详细。这段代码的最后部分是connect(self.CalculateTax)。这意味着这个按钮会被链接到一个叫做self.CalculateTax 的函数,这样以后每当用户按下这个按钮的时候,这段代码都会被调用。

    下面介绍一些获取控件的值和给控件赋默认值的方法:

    mainwindow.lineEdit.setText((u"zg 额外abc")) #给输入框赋值

    mainwindow.textEdit.setPlainText('') #给texedit赋值

    mainwindowboBox.setCurrentIndex(2) #给下拉框赋值

    mainwindow.checkBox.setChecked(1) #给复选框checkbox赋值,可以填写True或者False 或0 ,1

    print unicode(QString(mainwindow.lineEdit.text())) #获取输入框的值

    unicode(QString(mainwindow.textEdit.toPlainText()))#获textedit的值

    print unicode(QString(mainwindowboBox.currentText()))#获取下拉框的值

    print mainwindowboBox.currentIndex() #获取下拉框的index

    if mainwindow.checkBox.isChecked()==True 获取复选框checkbox的值

    好了,关于pyqt这块的,先写到这里,我也是刚刚利用这个春节的时间来琢磨完成的,不过还是需要再深入学习。

    展开全文
  • python
  • 基于Python开发的海德汉数控系统IO人机交互界面.pdf
  • matlab人机交互界面设计

    千次阅读 2020-02-28 14:39:01
    再通过switch语句对不同方法进行封装 3、滚动条 类似于opencv中的createTrackerbar 通过 val = get(handles.slider1,'value')获得滑动条的实时数据,滑动条数据范围可通过属性中的max进行设置 其中handles为界面句柄...
  • #基于LabVIEW的WIFI通信人机交互界面设计# 文章目录前言一、LabVIEW简介二、LabVIEW人机交互界面的软件设计三、 LabVIEW人机交互界面测试总结 前言 我们可以使用多种编程软件对实验数据进行处理,比如:C++、...
  • 在认识世界、解释世界和改造世界的实践中掌握Python编程特点、技术和技巧,学会结构化程序设计、面向对象程序设计、人机交互界面设计和数据分析等方面的编程技术。 本书可供大数据专业学生学习程序设计使用,也可...
  • 逛了一圈下来,总体上来说,python 图形界面有以下几个可行度比较高的解决方案。1. pyside为什么要把它写第一个呢?因为已经接触过 Qt,所以,总体来讲,感觉它更亲一点。没错,它就是 pyQt 的 LGPL 版本(Qt官方的...
  • 什么是人机交互系统

    2020-12-18 12:23:12
    人机交互技术(Human-Computer Interaction Techniques)是指通过计算机输入、输出设备,以有效的方式实现人与计算机...人机交互技术是计算机用户界面设计中的重要内容之一。它与认知学、人机工程学、心理学等学科领...
  • Python 图形化界面设计

    万次阅读 多人点赞 2019-05-30 21:40:24
    1、图形化界面设计的基本理解 当前流行的计算机桌面应用程序大多数为图形化用户界面(Graphic User Interface,GUI),即通过鼠标对菜单、按钮等图形化元素触发指令,并从标签、对话框等图型化显示容器中获取人机对话...
  • Python练习小项目,人机对战石头剪刀布(七局四胜),练习小游戏
  • 人机交互到艺术设计 - Python库之图形用户界面 - Python库之游戏开发 - Python库之虚拟现实 - Python库之图形艺术 - PyQt5、wxPython、PyGObject - PyGame、Panda3D、cocos2d - VR Zero、pyovr、Vizard - Quads、...
  • PYTHON实践——GUI界面

    千次阅读 2021-11-09 20:01:33
    同时,每个界面均有多个选项,便于使用者选择,让GUI界面较为人性化,可操作性强。 关键词:GUI界面,学生信息查找、录入,词云 目 录 1实践选题及目标...
  • 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() 使用方法三、...
  • 本文章小编给大家介绍Python中的GUI编程,将从以下两个角度来进行详细地介绍——什么是GUI编程?...在GUI中,用户在人机交互界面上上进行操作,通过键盘或鼠标输入指令,同时人机交互界面还接收计算...
  • 添加人机交互控件并编写相应的函数。 在主事件循环中等待用户触发事件响应。 窗体控件布局 根窗体是图像化应用程序的根控制器,是tkinter的底层控件的实例。当导入tkinter模块后,调用 Tk()方法可初始化一个根窗体...
  • (1)概述 (2)Python库之图形用户界面 1. 2. 3. (3)Python库之游戏开发 1. 2. 3. (4)Python库之虚拟现实 1. 2. 3. (5)Python库之图形艺术 1. 2. 3.
  • PyQt5是把 Qt Designer 设计界面转化为python代码的库。下面来讲Qt Designer的使用。创建UI界面首先打开我们的Qt Creater点击左上角文件的“新建文件或项目”,然后我们选择Qt Designer Form。选一个默认布局选择...
  • 创建librviz界面类: qrviz_widget.h #ifndef QRVIZ_WIDGET_H #define QRVIZ_WIDGET_H #include <QWidget> #include <rviz/visualization_manager.h> #include <rviz/render_panel.h> #include &...
  • Python库之图形用户界面 Python库之游戏开发 Python库之虚拟现实 Python库之图形艺术 Python库之图形用户界面 PyQt5 Qt开发框架的Python接口 提供了创建Qt5程序的Python API接口 Qt是非常成熟的跨平台桌面...
  • 无法通过命令行模式进入python交互模式安装了python·2.7 打开命令行模式后如下 输入python后如下 新人 分享解从没想过,自己可以爱的这么卑微,卑微的只因为你的一句话就欣喜不已。什么叫python交互式命令行其实...
  • 交互设计—超越人机交互(第5版)

    千次阅读 2020-07-16 04:40:16
    本书由交互设计界的三位顶尖学者联袂撰写,是该领域的经典著作,被全球各地的大学选作教材。新版本继承了本书一贯的跨学科特色,并与时俱进地新增了一章讨论大规模数据,同时补充了新的...
  • Python自带了tkinter 模块,实质...○ 添加人机交互控件并编写相应的函数。 ○ 在主事件循环中等待用户触发事件响应。 tkinter 常用控件 常用控件:常用的10 多种,如下: 控件的共同属性 文本框(Text) ...
  • python漂亮界面

    万次阅读 2020-11-24 00:07:30
    比较流行的一个 tkinter 的替代品,功能 非常强大,可以用qt开发多美漂亮的界面,也就可以用pyqt开发多么漂亮的界面。 跨平台的支持很好,不过在商业授权上似乎存在一些问题。 tkinter 绑定了 python 的 tk gui 工具...
  • python 监控界面

    千次阅读 2020-12-18 01:06:36
    MySQL MTOP - 开源 MySQL 企业监控系统MySQLMTOP...最重要是MySQL服务器无需安装任何Agent,只需在监控WEB界面配置相关数据库信息功能非常强大:可对上百台MySQL数据库的状态、连接数、Q...文章verdalee2019-07-2243...
  • 1、图形用户界面 PyQt5:Qt开发框架的Python接口 -提供了创建Qt5程序的Python API接口,Qt是非常成熟的跨平台桌面应用开发系统,完备GUI -推荐的Python GUI开发第三方库 -...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,826
精华内容 11,130
热门标签
关键字:

python人机交互界面设计