在循环中动态添加小部件,并获得其名称pyQt5



我想在带有循环的formLayout中添加一个小部件。

在另一个功能中,我希望能够与我刚刚创建的那些小部件进行交互。

我试过用一个字典。但我有这个错误:dlg.push_freflechis.clicked.connect(recip_filchiers_selec)

名称错误:未定义名称"recip_filchiers_selec">

from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QCheckBox
from PyQt5 import uic
import sys
import glob, os
import sys
import webbrowser
from pathlib import Path

app = QApplication(sys.argv)    # création application
dlg = uic.loadUi("logiciel_Rint3.ui")   # charge l'IHM crée avec Qt Designer

def charger_fichiers():
# nom_cristal = dlg.lineEdit_cristal.text()
# date = dlg.lineEdit_date.text()
nom_cristal = "SiTrans"
date = "2022-05-06"    
directory = 'C:/Users/diops/Desktop/Programme Rint_numérique/dépouillement/'+nom_cristal+'/'+date+'/'+'direct'    
os.chdir(directory)
# webbrowser.open(directory)
global L_file_direct    
L_file_direct = []
# L_checkb_direct = []
# input("Enregistrez les fichiers des signaux directs")
global c_d, var_checkd
c_d=1
var_checkd = dict()
for file in glob.glob("*.tif"):
globals()[f"checkb_direct{c_d}"] = QCheckBox()
var_checkd[c_d] = globals()[f"checkb_direct{c_d}"]
dlg.formLayout_direct.addRow(Path(file).stem, globals()[f"checkb_direct{c_d}"])
L_file_direct.append(Path(file).stem)
c_d += 1
directory = 'C:/Users/diops/Desktop/Programme Rint_numérique/dépouillement/'+nom_cristal+'/'+date+'/'+'reflechi'
os.chdir(directory)
# webbrowser.open(directory)
# L_checkb_reflechi = []
global L_file_reflechi
L_file_reflechi = []
# input("Enregistrez les fichiers des signaux réflechis")
global c_r,var_checkr
var_checkr = dict()
c_r=1
for file in glob.glob("*.tif"):
globals()[f"checkb_reflechi{c_r}"] = QCheckBox()
var_checkr[c_r] = globals()[f"checkb_reflechi{c_r}"]
dlg.formLayout_reflechi.addRow(Path(file).stem, globals()[f"checkb_reflechi{c_r}"])
L_file_reflechi.append(Path(file).stem)
c_r += 1

for i in range (1,c_d):
checkb = var_checkd[i]
if dlg.checkb.isTristate():
print(dlg.L_file_direct[i].text())
for i in range (1,c_r):
checkb = var_checkr[i]
if dlg.checkb.isTristate():
print(dlg.L_file_reflechi[i].text())
return

def recup_fichiers_selec():
for i in range (1,c_d):
checkb = var_checkd[i]
if dlg.checkb.isTristate():
print(dlg.L_file_direct[i].text())
for i in range (1,c_r):
checkb = var_checkr[i]
if dlg.checkb.isTristate():
print(dlg.L_file_reflechi[i].text())
return

dlg.pushb_ini.clicked.connect(charger_fichiers)
dlg.pushb_freflechis.clicked.connect(recup_fichiers_selec)
# Execution
dlg.show()
app.exec()

您的代码太乱了,我无法理解!但是,如果您想创建小部件并将其保存在字典中,pyqt(而不是ui)中的一个简单示例是这样的,您可以将对象添加到字典中:

keys = dict()
for i in range(1, 7):
keys[i] = QtWidgets.QPushButton(f'key_{i}')
keys[i].clicked.connect(func)

而且,如果你想在类中获得所有变量,你可以使用local,在某些情况下我不建议这样做。

for key, value in vars(self).items():
self.dictionary[key] = value

也许最好使用类编写代码,而使用全局变量并不是一个好的实践!

最新更新