J'ai une série de spinbox sur un formulaire que j'ai conçu avec les noms Qt Designer rate_0 à rate_6. Je voudrais me référer à l'une de ces boîtes de sélection en fonction du jour de la semaine d'une date donnée.Utilisation de eval() pour faire référence aux widgets dans PYQT
Si une valeur de spinbox donnée peut être appelé, je sais que self.ui.rate_0.value() que je peux utiliser
eval("self.ui.rate_" + "0" + ".value()")
mais de toute façon cela ne semble pas être la meilleure façon Qt Façon pythonique de le faire. Il semble aussi que je puisse traverser les enfants de layouts mais cela semble aussi désordonné.
Quelle est la meilleure façon de faire référence à des widgets sous une forme variable? Plus le code ci-dessous:
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
from datetime import datetime, timedelta, time
from rate_bulk_edit import *
class Bulk_rates(QDialog):
def __init__(self, parent=None):
QDialog.__init__(self, parent)
self.ui = Ui_update_rates()
self.ui.setupUi(self)
self.ui.pb_update_rates.clicked.connect(self.update_rates)
def update_rates(self):
self.start_date = self.ui.start_date.date().toPyDate()
self.end_date = self.ui.end_date.date().toPyDate()
d = self.start_date - timedelta(days=1)
delta = timedelta(days=1)
while d <= self.end_date - timedelta(days=1):
d += delta
QMessageBox.information(self,
"Test",
d.strftime('%Y-%m-%d') + " " +
str(eval("self.ui.rate_" + str(d.weekday()) + ".value()")))
QMessageBox.information(self, "Rates...", "Rates updated!")
if __name__=="__main__":
app=QApplication(sys.argv)
myapp = Bulk_rates()
myapp.show()
sys.exit(app.exec_())