我在我设计的表单上有一个系列的旋转框,rate_0 rate_6 Qt Designer名称。 我想参考基于给定日期的星期几的这些旋转盒之一。
如果给定的旋转框的值可以称为 self.ui.rate_0.value((,我知道我可以使用
eval("self.ui.rate_" + "0" + ".value()")
但不知何故,这似乎不是最好的Qt方法或Pythonic方法。 似乎我也可以遍历布局的子项,但这似乎也很混乱。
以变量形式引用小部件的最佳方式是什么? 更多代码如下:
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_())
QWidgets最终应该存储为任何其他Python属性,所以我认为您正在寻找的是内置函数getattr。在您的代码中,完整字符串在一行中如下所示:
d.strftime('%Y-%m-%d') + " " + str(getattr(self.ui, 'rate ' + str(d.weekday())).value())
如果您还想主动检查旋转框是否确实存在,它将如下所示:
spinbox = getattr(self.ui, 'rate_' + str(d.weekday()), None)
if spinbox is None:
# Raise error or whatever
else:
# Launch message box here