outil de développement d'interface graphique python, tutoriel de développement d'interface graphique python

Cet article parlera du développement d'interface graphique Python et des outils de développement d'interface graphique Python. J'espère qu'il vous sera utile. N'oubliez pas de mettre ce site dans vos favoris.

1. Forme racine

        (1) Créer l'objet de formulaire racine

        ①tkinter.Tk() : crée un objet de formulaire racine. La fenêtre s'affichera immédiatement après utilisation.N'oubliez pas d'utiliser root pour recevoir les questions du test Python des technologies de l'information du lycée .

        ②root.title(name) : définissez le titre du formulaire racine.

        ③root.geometry('aaaxbbb') : définit la taille de la forme racine. Notez que le signe de multiplication ici est la lettre minuscule x, aaa est la largeur et bbb est la hauteur.

        ④root.mainloop() : surveillez le code supérieur et bloquez le code inférieur jusqu'à ce que la fenêtre soit fermée.

import tkinter

root = tkinter.Tk()
root.title('myapp')    #不要写成root.title='myapp',这与c++窗体不同
root.geometry('500x300')
root.mainloop()

        (2) Disposition des commandes

        Méthode .pack() (utilisez Label comme exemple)

        ①tkinter.Label(root,..,text,fg,relief) : crée un objet étiquette. Parmi eux, root est la forme racine ; text est le texte de l'étiquette ; fg est la couleur de l'étiquette et diverses couleurs sont exprimées en anglais ; relief est l'attribut de bord de l'étiquette et relief=tkinter.GROOVE est l'attribut de retrait de bord. Notez que le L dans Label est en majuscule.

        ②label.pack() : placez l'étiquette sur le formulaire racine. Les règles de placement sont les suivantes : si la méthode par défaut sans paramètres est utilisée, ils seront disposés verticalement de haut en bas sous une forme sans chevauchement et serrée, et la position horizontale sera centrée.

        ③label.pack() peut définir des paramètres tels que le remplissage et le côté. Parmi eux, le paramètre fill peut prendre les valeurs : fill=X, fill=Y ou fill=BOTH, ce qui signifie respectivement que le contrôle est autorisé à remplir l'espace restant dans le sens horizontal, vertical ou bidimensionnel. Paramètre side Valeurs possibles : side=TOP (par défaut), side=LEFT, side=RIGHT, side=BOTTOM, qui indiquent respectivement l'orientation de la disposition de cette instance de contrôle par rapport à l'instance de contrôle suivante.

import tkinter

root=tkinter.Tk()
lbred=tkinter.Label(root,text='red',fg='red',relief=tkinter.GROOVE)
lbred.pack()
lbgreen=tkinter.Label(root,text='绿',fg='green',relief=tkinter.GROOVE)
lbgreen.pack(side=tkinter.LEFT)
lbblue=tkinter.Label(root,text='blue',fg='blue',relief=tkinter.GROOVE)
lbblue.pack(fill=tkinter.BOTH)
root.mainloop()

         Méthode .grid()

        En fonction de la disposition du tableau, placez le contrôle drop dans le tableau correspondant. Les significations de certains paramètres sont les suivantes :
        ① colonne, ligne : coordonnées de ligne et de colonne du contrôle, la valeur par défaut est 0 (notez que les coordonnées commencent à 0).

        ②columnspan, rowspan : le nombre de lignes et de colonnes couvertes par le contrôle, la valeur par défaut est 1

        ③ipadx, ipady : Le nombre de pixels dans la zone présentée par le contrôle d'instance définit la taille du contrôle.

        ④padx, pady : La taille de la cellule où se trouve le contrôle d'instance, définissant la taille de la cellule.

        Méthode .place()

        Disposez l'espace en fonction de sa position relative dans le conteneur parent :

        ①x,y : les coordonnées du contrôle par rapport à la forme racine.

        ② relx, trust : La position relative du contrôle par rapport à la forme racine.

        ③hauteur et largeur : la hauteur et la largeur du contrôle. (Les unités sont des pixels).

        ④relheight et relwidth : la hauteur et la largeur relatives du contrôle par rapport à la forme racine.

Remarque : peut être mélangé avec la méthode grid()

import tkinter

root = tkinter.Tk()
root.title('myapp')    #不要写成root.title='myapp',这与c++窗体不同
root.geometry('500x300')
msg1=tkinter.Message(root,text='我是一行文字我是另一行文字',relief=tkinter.GROOVE)
msg1.place(relx=0.2,rely=0.4,relwidth=0.6,relheight=0.4)
root.mainloop()

2. Contrôles communs

        (1) Introduction aux contrôles couramment utilisés

                Les espaces couramment utilisés sont les suivants :

contrôle nom effet
Bouton bouton cliquez sur l'événement déclencheur
Toile toile Dessinez des graphiques ou dessinez des contrôles spéciaux
Bouton à cocher case à cocher choix multiple
Entrée Zone de saisie Accepter la saisie de texte sur une seule ligne
Cadre cadre Utilisé pour regrouper les contrôles
Étiquette Étiquette Affichage de texte sur une seule ligne
Zone de liste zone de liste Afficher la liste de textes
Menu       menu Créer des commandes de menu
Message information Étiquette de texte multiligne, similaire à l'utilisation de l'étiquette
Bouton radio Boîte unique Effectuez une seule sélection parmi plusieurs options mutuellement exclusives
Échelle glissière  Faites glisser la souris pour modifier la valeur
Barre de défilement Glissière c'est-à-dire la barre de défilement
Texte zone de texte Accepter ou sortir pour afficher plusieurs lignes de texte
Haut niveau Créer un nouveau conteneur de formulaire Créer un nouveau conteneur de formulaire au niveau supérieur

                 Propriétés communes des contrôles :

Les attributs  illustrer valeur
ancre position de départ du texte CENTRE (par défaut), E,S,W,N,NE,SE,SW,NW
bg Couleur de l'arrière plan 'rouge', 'vert'
bd Audacieux aucun
le curseur curseur de survol de la souris -
Police de caractère Police de caractère Par exemple : (« Nouveau Wei chinois », 32)
fg         couleur de premier plan 'rouge', 'vert'
hauteur Hauteur (l'unité de contrôle du texte est constituée de lignes et non de pixels) nombre
image afficher l'image aucun
justifier Alignement du texte multiligne CENTRE (par défaut), GAUCHE, DROITE, HAUT, BAS
Padx Étendre les pixels horizontalement aucun
Paddy Étendre les pixels verticalement aucun
relief style de bordure PLAT, SURÉLEVÉ, ENFORÉ, RAINURE, FÊTE
État Si l'état de l'instance de contrôle est disponible NORMAL (par défaut), DÉSACTIVÉ
largeur Largeur (l'unité du contrôle de texte est constituée de lignes et non de pixels) aucun
from tkinter import *
root=Tk()
lb = Label(root,text='hello world!',\
        bg='#00ffff',\
        fg='green',\
        font=('微软雅新',32),\
        relief=GROOVE,\
        width=20,\
        height=2)
lb.pack()
root.mainloop()

Remarque : Les unités de largeur et de hauteur sont des colonnes ou des lignes car elles sont données en unités de tableau lorsqu'elles sont placées à l'aide de pack() ou grid(). Si elle est placée à l'aide de place(), la taille du contrôle peut être définie dans le paramètre place, où l'unité est le pixel.

        (2) Contrôles liés à la saisie et à la sortie de texte

        .Label et Message : Label affiche une seule ligne de texte et Message affiche plusieurs lignes de texte. Les autres propriétés sont fondamentalement les mêmes.

        L'attribut text ne peut être utilisé que pour du texte fixe lors du premier rendu. Si vous devez modifier le texte, il existe deux méthodes :

        ① Utilisez la méthode configure() pour modifier la valeur du texte ;

        ② Définissez la variable de type interne de tkinter var=StringVar(), et modifier sa valeur peut également modifier le texte.

        Méthode 1 : utilisez la méthode configure() pour modifier la valeur du texte

from tkinter import *
import time

root=Tk()
root.geometry('500x300')

def gettime():
        nowtime=time.strftime("%H:%M:%S")
        lb.config(text=nowtime)
        root.after(1000,gettime) #1000ms后调用gettime()函数

if __name__=='__main__':
        root.title('time')
        lb=Label(root,text='',fg='red',font=('微软雅新',80))
        lb.pack()
        gettime()
        root.mainloop()

Remarque : config() est utilisé dans l'exemple. En fait, configure() a le même effet. Concernant leurs différences, aucune différence n’a été constatée lors de l’utilisation et la recherche d’informations en ligne s’est révélée infructueuse.

          Méthode 2 : utilisez l’attribut de variable textvariable pour implémenter les modifications de texte.

        

from tkinter import *
import time
root=Tk()
root.geometry('500x300')

def gettime():
        nowtime=time.strftime("%H:%M:%S")
        #lb.configure(text=nowtime,fg='green')
        var.set(nowtime)
        root.after(1000,gettime) #1000ms后调用gettime()函数

if __name__=='__main__':
        root.title('time')
        var=StringVar() #创建一个特殊变量对象
        lb=Label(root,textvariable=var,fg='red',font=('微软雅新',80)) #注意这里定义Label时定义textvariable而不是text
        lb.pack()
        gettime()
        root.mainloop()

        .Zone de texte (Texte)

        La méthode de la zone de texte est la suivante :

méthode Fonction
supprimer (position de départ, [, position de fin]) Supprimer le texte dans la zone spécifiée
obtenir (position de départ, [, position de fin]) Obtenez le texte de la zone spécifiée
insérer(position,[,chaîne]...) Insérer du texte à la position spécifiée
voir(position) 在指定位置是否可见文本,返回布尔值
index(标记) 返回标记所在的行和列
mark_names() 返回所有标记名称
mark_set(标记,位置) 在指定位置设置标记
mark_unset(标记) 去除标记

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

from tkinter import *
import time
import datetime

root=Tk()
root.geometry('500x300')

def gettime():
        nowtime=str(datetime.datetime.now())+'\n'
        txt.insert(END,nowtime)
        root.after(1000,gettime) #1000ms后调用gettime()函数

if __name__=='__main__':
        root.title('timetext')
        txt=Text(root)
        txt.pack()
        gettime()
        root.mainloop()

        .输入框(Entry):接受单行文本输入的控件。通常只用get()和delete()两个方法,delete(0,END)可清空输入框。

        (3)按钮(Button)

         button相应鼠标单击事件。相应的事件函数需先定义好,然后用以下两种方法调用函数。

        .直接调用函数。command=函数名。注意函数名后加括号不加参数

        .利用匿名函数调用函数和传递参数。参数的表达式为,“command=lambda”:函数名(参数列表)。例如:“command=lambda:run2(inp1.get(),inp2.get())”。

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

        (4)单选按钮(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()

        (5)复选框:(Checkbutton)

        该控件除具有共有属性外,还具有显示文本(text)、返回变量(variable)、选中返回值(onvalue)和未选中默认返回值(offvalue)等重要属性。

        返回变量variable=var 通常可以预先逐项分别声明变量的类型var=IntVar() (默认)或 var=StringVar(), 在所调用的函数中方可分别调用 var.get()方法 取得被选中实例的 onvalue或offvalue值。


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

        (6)列表框(Listbox)与 组合框(Combobox)

        . 列表框(Listbox)

方法 功能描述
curselection() 返回光标选中项目编号的元组,注意并不是单个的整数
delete(起始位置,终止位置) 删除项目,终止位置可省略,全部清空为delete(0,END)
get(起始位置,终止位) 返回范围所含项目文本的元组,终止位置可忽略
insert(位置,项目元素) 插入项目元素(若有多项,可用列表或元组类型赋值),若位置为END,则将项目元素添加在最后
size() 返回列表框行数

        列表框实质上就是将Python 的列表类型数据可视化呈现,在程序实现时,也可直接对相关列表数据进行操作,然后再通过列表框展示出来 。

from tkinter import *

root=Tk()
root.geometry('500x300')

def init():
        list=['数学','物理','化学','语文','外语']
        listbox.delete(0,END)
        for item in list:
                listbox.insert(END,item)
        return

def insert():
        if entry.get() != '':
                if listbox.curselection() !=():
                        id=listbox.curselection()[0]
                        listbox.insert(id,entry.get())
                else:
                        listbox.insert(END,entry.get())
        return
def change():
        if entry.get() !='':
                if listbox.curselection() != ():
                        id=listbox.curselection()[0]
                        listbox.delete(id)
                        listbox.insert(id,entry.get())
        return
def delete():
        if listbox.curselection() != ():
                listbox.delete(listbox.curselection())
        return
def clear():
        listbox.delete(0,END)
        return

if __name__=='__main__':
        root.title('列表框实验')
        fm1=Frame(root)
        fm2=Frame(root)
        fm1.place(relx=0.0)
        fm2.place(relx=0.5)
        listbox=Listbox(fm1)
        listbox.pack()
        entry=Entry(fm2)
        entry.pack()
        btn1=Button(fm2,text='初始化',command=init)
        btn2=Button(fm2,text='插入',command=insert)
        btn3=Button(fm2,text='修改',command=change)
        btn4=Button(fm2,text='删除',command=delete)
        btn5=Button(fm2,text='清空',command=clear)
        btn1.pack(fill=X)
        btn2.pack(fill=X)
        btn3.pack(fill=X)
        btn4.pack(fill=X)
        btn5.pack(fill=X)
        root.mainloop()

        . 组合框(Combobox)

        该控件并不包含在 tkinter 模块中,而是与 TreeView、Progressbar、Separator等控件一同包含在tkinter 的子模块ttk中。因此使用该控件前,应先from tkinter.ttk import *。

from tkinter import *
from tkinter.ttk import *
root=Tk()
root.geometry('500x300')

def cul(event): #注意一定要传递一个参数,将来这个参数代表实例本身
        c=cb.current()
        try:
                a=float(input1.get())
                b=float(input2.get())
        except:
                return
        dict={0:a+b,1:a-b,2:a*b,3:a/b}
        lb.configure(text=str(dict.get(c)))
        return

if __name__=='__main__':
        root.title('四则运算')
        input1=Entry(root)
        input2=Entry(root)
        input1.place(relx=0.1,rely=0.1)
        input2.place(relx=0.5,rely=0.1)
        cb=Combobox(root,values=['加','减','乘','除'])
        cb.place(relx=0.1,rely=0.5)
        cb.bind('<<ComboboxSelected>>',cul) #设置复选框被选择的相应函数
        lb=Label(root)
        lb.place(relx=0.5,rely=0.5)
        root.mainloop()

        指定变量var=StringVar(),并设置实例属性 textvariable = var,values=[列表...]。组合框控件常用方法有:获得所选中的选项值get()和获得所选中的选项索引current()。

        :定义的cur()函数必须带一个参数,名字可以任意。因为当定义<<ComboboxSelected>>事件的相应函数时,也将实例cb传入了进去。

        (7) Curseur : (Échelle)

        Le curseur (Échelle) est un contrôle interactif pour une saisie numérique intuitive. Ses principales propriétés sont présentées dans le tableau ci-dessous :

Les attributs Description de la fonction
depuis_ Valeur de départ (valeur minimale possible)
étiquette Texte de l'étiquette, la valeur par défaut est Aucun
longueur Largeur d'instance de contrôle de curseur (direction horizontale) ou hauteur (direction verticale), la valeur par défaut est 100 pixels
Orient Direction de rendu de l'instance de contrôle du curseur, VERTCAL ou HORIZONTAL (par défaut)
Délai de répétition Délai de réponse de la souris, la valeur par défaut est 300 ms
résolution Précision de la résolution, c'est-à-dire intervalle de valeur minimum
longueur du curseur Largeur du curseur, la valeur par défaut est 30 pixels
État State, si state=DISABLED est défini, l'instance de contrôle du curseur n'est pas disponible
intervalle de tique L'intervalle de la règle est par défaut 0. S'il est trop petit, il se chevauchera.
à Valeur de terminaison (valeur maximale possible)
variable Renvoie une valeur numérique, le type peut être IntVar (entier), DoubleVar (nombre à virgule flottante) ou StringVar (chaîne)
largeur La largeur de l'instance de contrôle elle-même est par défaut de 15 pixels.

        Les principales méthodes des instances de contrôle de curseur sont relativement simples, notamment get() et set(value).

        L'instance du curseur peut également être liée à l'événement de relâchement du bouton gauche de la souris <ButtoonRelease-1>, et le paramètre d'événement est ajouté à la fonction d'exécution pour implémenter la réponse à l'événement. Notez qu'il s'agit de crochets simples '<', '>' et non de crochets doubles '<<', '>>'.

from tkinter import *

root=Tk()
root.geometry('500x300')
def getval(event):
        c=var.get()
        lb.configure(text=f'滑块的取值为{c}')
        return

if __name__=='__main__':
        root.title('滑块实验')
        var=DoubleVar()
        sc=Scale(root,orient=HORIZONTAL,length=200,from_=1.0,to=5.0,label='请拖动滑块',tickinterval=1,resolution=0.05,variable=var)
        sc.pack()
        lb=Label(root,text='滑块取值为1')
        lb.pack()
        sc.bind('<ButtonRelease-1>',getval)
        root.mainloop()

        (8)Menus

Je suppose que tu aimes

Origine blog.csdn.net/chatgpt001/article/details/132955612
conseillé
Classement