python-3.x - Python - 添加小部件将在使用 threading.timer 时在新窗口中创建它们
问题描述
我实际上在使用 threading.Timer() 函数时遇到问题,以便每 X 分钟重复一次分析。
所以这个想法是计算一个接口的操作次数,并对同一个接口的每个类别进行计数。在代码的每次重复过程中,类别的旧值将从布局(QGridLayout)中删除,并添加新值。
当我单击一次按钮时,它完美无缺。但是当我激活 threading.Timer() 选项以自动重复操作时,在添加新的 QLabel 时,它会将它们添加为新窗口“pythonw”。
我无法理解发生了什么,因为代码可以完全识别布局,删除旧的小部件就可以了,但是当需要插入新的小部件时,它会将它们作为新窗口插入......
我读到您最终需要在使用线程时更新自我窗口?不太清楚,能不能帮帮我??
def Configuracion(self,ListBox):
ScrollingArea = self.findChildren(QScrollArea)
LayoutFrame = ScrollingArea[0].widget().layout()
ColumnaListBox = LayoutFrame.getItemPosition(LayoutFrame.indexOf(ListBox))[1]
DictValores = {}
#Quitamos eventuales valores creados antes
i = 0
while True:
try:
LayoutFrame.itemAtPosition(6 + i, ColumnaListBox).widget().setParent(None) #.deleteLater()
i += 1
except:
break
for i in range(0,ListBox.count()):
if not ListBox.item(i).text().split('|')[-1].strip() in DictValores:
DictValores[ListBox.item(i).text().split('|')[-1].strip()] = 1
else:
DictValores[ListBox.item(i).text().split('|')[-1].strip()] += 1
i = 0
ListaValor = []
for clave in sorted(DictValores.keys()):
Valor = QLabel(clave + ': ' + str(DictValores[clave]) + ' / ' + str(ListBox.count()))
Valor.setAlignment(Qt.AlignCenter)
if 'Error' in clave:
Valor.setStyleSheet("font: bold;color : red")
else:
Valor.setStyleSheet("font: bold;color : green")
LayoutFrame.addWidget(Valor, 6 + i, ColumnaListBox)
if ListBox.count() == 0:
Item = QtWidgets.QListWidgetItem()
Item.setText('Sin Operaciones por el momento')
Item.setTextAlignment(Qt.AlignHCenter)
font = QtGui.QFont()
font.setBold(True)
Item.setFont(font)
ListBox.addItem(Item)
ListBox.sortItems()
ListBox.scrollToBottom()
ListBox.setMinimumWidth(ListBox.sizeHintForColumn(0) + 20)
在“LayoutFrame.addWidget(Valor, 6 + i, ColumnaListBox)”行上添加小部件时,使用 threading.Timer() 在 X 分钟后安排执行时,它会失败,但在执行代码一次时不会。我已经检查了 ScrollingArea/Frame/Layout 的定义,它们被正确识别,并且具有相同的地址,所以这里会出现什么问题???
谢谢您的帮助 !:)
解决方案
没关系,使用一个简单的 QTimer() 对象解决了它......仍然对使用线程时出了什么问题感到好奇,所以如果想以某种方式分享一些关于它的观点,那就太好了:)
推荐阅读
- ruby - 如何获取 vSphere VM 的创建时间
- javascript - 检查字符串是否匹配
- python - 防止 NumExpr 评估破坏我的机器人 (dpy)
- c# - 周期太长
- javascript - JS使数组中的所有值都不同
- python - 在 Python 中将频率转换为音符
- python - 在 discord.py wait_for 上带有 check() 的 TypeError
- python - Anaconda worker 无法启动,因为:与 localhost 的连接在 0.2 秒后超时。在 2.0 秒内尝试连接 7 > 次
- c - c - 作为具有静态持续时间的对象的初始值设定项的指针
- android - Flutter:通过坐标从图像中提取矩形