我有以下问题:
在PyQt制作的GUI中按下按钮时,我必须执行以下两项操作:
我得到的是在等待一段时间后,同时完成1和2。
部分代码是:
#in the signals definition...
signalUpdateProgressDialog = QtCore.pyqtSignal(str) # signal definition
#in the connections definition...
self.btnStopOpt.clicked.connect(self.clickStop1)
self.btnStopOpt.clicked.connect(self.clickStop)
def updateProgressDialog(self, dialog):
self.ProgressDialog.setHtml(dialog)
def clickStop1(self):
# notify
self.signalUpdateProgressDialog.emit('Message')
def clickStop(self):
# shut down thread...
print "Thread Stopped"
time.sleep(5)
# enable run button
self.btnRun.setEnabled(True)
我在一个clickStop方法中尝试了所有方法,尝试了是否为updateProgress发出信号。始终,仅在等待时间之后刷新GUI。
不过,我之前遇到过这个问题,我想我不了解它如何与GUI一起工作。通常,如何获得所需的行为:执行代码行时会更新GUI?
在控制权返回到Qt事件循环之前,不会更新/绘制GUI。事件循环在主线程中运行,并处理与GUI的交互并协调信号/插槽系统。
在类似的插槽中调用Qt函数时clickStop1()
,Qt调用会运行,但不会立即重绘GUI。在这种情况下,控制clickStop()
只有在完成运行(即clicked
处理完信号的所有插槽)后才返回事件循环。
代码的主要问题是您time.sleep(5)
在主线程中有一个,这会阻止用户进行GUI交互以及重绘。您应将插槽的执行时间保持较短,以维护响应式GUI。
clicked()
因此,我建议您进行修改,以使其QTimer
在指定的超时后触发单发。QTimer
s不会阻塞主线程,因此将保持响应性。但是,请注意,与此同时,用户可能会与GUI交互!在等待QTimer
执行过程中,请确保它们不会通过用户交互来破坏程序的状态。
2.8 操作顺序 当表达式中出现了多个运算符的时候,计算顺序取决于优先级规则。一个完整的优先级说明是十分复杂的,出于让您尽快入门的目的,先列出以下几点: 乘除法运算优先于加减法运算。因此2*3-1得到5,而不是4。2/3-1得到-1,而不是1(记住在整型除法中2/3结果是0)。 如果运算符有相同的优先级,它们会按照从左往右的顺序计算。因此表达式minute*100/60中,乘法运算最先进行,得到5
本文向大家介绍JavaScript setTimeout,操作顺序,clearTimeout,包括了JavaScript setTimeout,操作顺序,clearTimeout的使用技巧和注意事项,需要的朋友参考一下 示例 setTimeout 等待指定的毫秒数后执行功能。 用于延迟执行功能。 语法: setTimeout(function, milliseconds)或window.setTi
reverse 返回一个与指定list相反顺序的list。 val unsortedList = listOf(3, 2, 7, 5) assertEquals(listOf(5, 7, 2, 3), unsortedList.reverse()) sort 返回一个自然排序后的list。 assertEquals(listOf(2, 3, 5, 7), unsortedList.sort())
主要内容:顺序栈元素"入栈",顺序栈元素"出栈",总结顺序栈,即用 顺序表实现栈存储结构。通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序表模拟栈以及实现对栈中数据的基本操作(出栈和入栈)" 给大家做详细介绍。 如果你仔细观察顺序表(底层实现是数组)和栈结构就会发现,它们存储数据的方式高度相似,只不过栈对数据的存取过程有特殊的限制,而顺序表没有。 例如,我们先使用顺序表(a 数组)存储 ,存储
主要内容:顺序表插入元素,顺序表删除元素,顺序表查找元素,顺序表更改元素我们学习了 顺序表及初始化的过程,本节学习有关顺序表的一些基本操作,以及如何使用 C 语言实现它们。 顺序表插入元素 向已有顺序表中插入数据元素,根据插入位置的不同,可分为以下 3 种情况: 插入到顺序表的表头; 在表的中间位置插入元素; 尾随顺序表中已有元素,作为顺序表中的最后一个元素; 虽然数据元素插入顺序表中的位置有所不同,但是都使用的是同一种方式去解决,即:通过遍历,找到数据元素要插入的位
因为在过滤2之后,我们还得再找到一个元素来分层极限(2),操作,那么为什么输出不像我解释的那样呢?