(3) Contrôle de la zone de liste déroulante de données de la programmation simplifiée de l'interface graphique python tkinter


La création n'est pas facile, merci de me pardonner votre soutien, merci!


Répertoire d'articles de programmation simplifiée Python tkinter GUI (cliquez pour envoyer)

Répertoire d'articles de programmation simplifiée Python tkinter GUI


1. Auto-introduction, emballage et utilisation

Cette série d'articles expliquera d'abord la bibliothèque tkinter qui encapsule python, puis encapsulera d'autres bibliothèques d'interface graphique python. Les détails peuvent être parcourus à partir du premier chapitre, et ne seront pas expliqués dans la suite.


Deux, encapsule le contrôle de zone de liste déroulante de données

Dans le premier chapitre python-GUI简单化编程之基础窗口, nous importons déjà package chargé tkinter et l' utilisation d'autres bibliothèques, et ajoute 封装基础窗口, 封装顶层窗口code. Maintenant, nous PythonGui.pywajoutons le package de code suivant 数据组合框控件. Veillez à ne pas supprimer le code précédent.

def S_创建数据组合框控件(放置属性,组合框属性,变量属性):
    '''
    函数说明:\n\n
    放置属性为一个列表,元素的意义分别为: 0.放置的窗口 1.放置于窗口的行 2.放置于窗口的列\n\n
    组合框属性为一个列表,元素的意义分别为:0.组合框名称 1.是否开启输入(True,False) 2.是否开启输入保护 3.输入框宽度 4.字体大小 5.背景颜色\n\n
    变量属性为一个列表,元素的意义分别为:0.变量类型(int,double,string,bool) 1.默认值 2.是否保存变量值 3.变量保存的文件夹名称\n\n
    '''
    放置窗体 = 放置属性[0]
    放置位置 = 放置属性[1:]
    组合框名称 = 组合框属性[0]
    是否开启输入 = 组合框属性[1]
    是否开启输入保护 = 组合框属性[2]
    输入框宽度 = 组合框属性[3]
    字体大小 = 组合框属性[4]
    背景颜色 = 组合框属性[5]
    变量类型 = 变量属性[0]
    默认值 = 变量属性[1]
    是否保存变量值 = 变量属性[2]
    变量保存的文件夹名称 = 变量属性[3]
    组合框变量 = tk.StringVar()
    输入状态 = tk.DISABLED
    if 变量类型 == 'int':
        组合框变量 = tk.IntVar()
    if 变量类型 == 'double':
        组合框变量 = tk.DoubleVar()
    if 变量类型 == 'string':
        组合框变量 = tk.StringVar()
    if 变量类型 == 'bool':
        组合框变量 = tk.BooleanVar()
    if 是否开启输入:
        输入状态 = tk.NORMAL
    子窗口 = tk.Frame(放置窗体,bg =背景颜色,height = 50,width = 200 )
    子窗口.grid(row = 放置位置[0],column = 放置位置[1],padx = 2,pady= 2)
    tk.Label(子窗口,text = 组合框名称 ,font=('黑体', 字体大小),bg=背景颜色).grid(row = 0,column = 0,padx = 1,pady= 1)
    组合框变量.set(默认值)
    if 是否保存变量值:
        保存路径及名称 = os.path.dirname(os.path.realpath(sys.argv[0]))+"/"+变量保存的文件夹名称+"/"+组合框名称
        try:
            with open(保存路径及名称,"r") as f:
                for line in f.readlines():
                    组合框变量.set(line.strip('\n'))
            f.close()
        except:
            组合框变量.set(默认值)
            with open(保存路径及名称,"w") as f:
                f.write(str(组合框变量.get())) 
            f.close()
        def 写入保存值(*args):
            保存路径及名称 = os.path.dirname(os.path.realpath(sys.argv[0]))+"/"+变量保存的文件夹名称+"/"+组合框名称
            with open(保存路径及名称,"w") as f:
                f.write(str(组合框变量.get())) 
            f.close()
        组合框变量.trace("w",写入保存值)
    if 是否开启输入保护 == True:
        tk.Entry(子窗口, textvariable = 组合框变量, width = 输入框宽度,font=('黑体', 字体大小),justify = tk.CENTER,state = 输入状态,show = '*').grid(row = 0,column = 1,padx = 1,pady= 1)
        return 组合框变量
    else:
        tk.Entry(子窗口, textvariable = 组合框变量, width = 输入框宽度,font=('黑体', 字体大小),justify = tk.CENTER,state = 输入状态).grid(row = 0,column = 1,padx = 1,pady= 1)
        return 组合框变量

Troisièmement, l'utilisation de bibliothèques de packages

Ajoutez le code suivant à test.pyw pour préparer les tests et créez un nouveau dossier nommé comme fichier de script dans le même dossier '测试保存变量值文件夹':

Insérez la description de l'image ici

import PythonGui as GUI
主窗体 = GUI.A_建立根页面(['测试软件',800,510,'Beige'],'')
测试数据组合框 = GUI.S_创建数据组合框控件([主窗体,0,0],['测试数据组合框',True,False,10,12,'Beige'],['int',123,False,'测试保存变量值文件夹'])
主窗体.mainloop() 

S_创建数据组合框控件()Il existe deux paramètres formels dans la fonction: 1. Propriété de placement 2. Propriété de zone de liste déroulante 3. Propriété de variable.
(1) L'attribut de placement est une liste, et les significations des éléments sont: 0. La fenêtre placée 1. La ligne de la fenêtre 2. La colonne de la fenêtre
(2) La propriété combo box est une liste, et le les significations des éléments sont: 0. Nom de la zone de liste déroulante 1. Activer ou non l'entrée (Vrai, Faux) 2. Activer ou non la protection d'entrée (Vrai, Faux) 3. Largeur de la zone de saisie 4. Taille de la police 5. Couleur d'arrière-plan. Parmi eux, il 是否开启输入indique si le contrôle accepte une entrée externe. Lorsqu'il est défini sur False, la fonction d'entrée n'est pas activée; et il 是否开启输入保护indique si le caractère saisi par le contrôle est affiché sous la forme d'un "astérisque", s'il est sur True, il s'affiche sous la forme d'un «astérisque», qui est principalement utilisé pour les mots de passe enter.
(3) L'attribut variable est une liste et la signification des éléments est: 0. Type de variable (int, double, string, bool) 1. Valeur par défaut 2. S'il faut enregistrer la valeur de la variable 3. Le nom de le dossier dans lequel la variable est enregistrée. Ce qui 是否保存变量值indique si vous souhaitez enregistrer la valeur dans le contrôle lorsque le programme est en cours d' exécution, de sorte qu'il peut être chargé lorsque le programme est exécuté à nouveau, et 变量保存的文件夹名称il est le dossier dans lequel la variable est enregistrée. Si elle est vide, la variable est enregistrée dans le même répertoire que le script. Il est recommandé de créer un nouveau dossier dans le même répertoire pour stocker et enregistrer les fichiers.

Le résultat en cours d'exécution du programme en cours est: créer un 测试数据组合框contrôle de zone de liste déroulante de données nommé , qui est placé dans 主窗体la 0ligne et la 0colonne; le nom d'affichage du contrôle est 测试数据组合框, et il est activé 输入功能mais pas activé 输入保护, la largeur de la zone de saisie est 10, et la taille de la police est 12, La couleur d'arrière-plan du Beigecontrôle est ; le type de données du contrôle est int, la valeur initiale est 123 et il n'est pas activé.变量保存
Insérez la description de l'image ici
Ensuite, testez si la fonction d'entrée du contrôle est activée 是否开启输入activé , il sera défini sur False et vous constaterez que la zone de liste déroulante a désactivé la fonction d'entrée

import PythonGui as GUI
主窗体 = GUI.A_建立根页面(['测试软件',800,510,'Beige'],'')
测试数据组合框 = GUI.S_创建数据组合框控件([主窗体,0,0],['测试数据组合框',False,False,10,12,'Beige'],['int',123,False,'测试保存变量值文件夹'])
主窗体.mainloop() 

Insérez la description de l'image ici
Ensuite, testez si la protection d'entrée du contrôle est activée, elle sera 是否开启输入保护définie sur True et vous constaterez que les caractères affichés dans la zone de liste déroulante sont devenus des `` astérisques ''

import PythonGui as GUI
主窗体 = GUI.A_建立根页面(['测试软件',800,510,'Beige'],'')
测试数据组合框 = GUI.S_创建数据组合框控件([主窗体,0,0],['测试数据组合框',True,True,10,12,'Beige'],['int',123,False,'测试保存变量值文件夹'])
主窗体.mainloop() 

Insérez la description de l'image ici
Ensuite, testez la fonction d'enregistrement des variables du contrôle et 是否保存变量值définissez-la sur True. Après avoir exécuté le programme, vous constaterez qu'il 测试保存变量值文件夹y aura un fichier supplémentaire sous le dossier nommé comme 测试数据组合框, qui est le nom de la zone de liste déroulante que vous avez définie. Changez la valeur du contrôle en un autre nombre, fermez le programme et redémarrez le programme, vous constaterez que la valeur dans le contrôle deviendra la valeur que vous venez de définir, réalisant ainsi la fonction de sauvegarde.
Insérez la description de l'image ici

import PythonGui as GUI
主窗体 = GUI.A_建立根页面(['测试软件',300,210,'Beige'],'')
测试数据组合框 = GUI.S_创建数据组合框控件([主窗体,0,0],['测试数据组合框',True,True,10,12,'Beige'],['int',123,True,'测试保存变量值文件夹'])
主窗体.mainloop() 

L'interface d'exécution du programme pour la première fois:
Insérez la description de l'image ici
fermez le programme après avoir changé la valeur en 1234456 et redémarrez le programme, et le numéro dans la boîte d'affichage deviendra 1234456
Insérez la description de l'image ici


Quatre, résumé

Si vous avez des suggestions, veuillez les signaler dans la zone des commentaires et progresser ensemble, merci. ps: Je travaille généralement beaucoup d'heures supplémentaires, donc je prendrai le temps de mettre à jour les chapitres suivants. (Soyez un programmeur pratique, même si le code est simple, l'écrire une fois est préférable de le coller dix fois)
L'avantage de cette fonction d'encapsulation est de fonctionnaliser le code répété. Supposons que vous ayez besoin de créer un affichage qui affiche 51 données Box, comment écrirais-tu?
Insérez la description de l'image ici
répondre:

将在下一章的总结中贴出

Je suppose que tu aimes

Origine blog.csdn.net/baidu_37611158/article/details/114831389
conseillé
Classement