我构建了一个PyQt5 GUI来进行一些selenium测试。除PyQt进度条外,其他所有操作均按预期进行。
在下面的第一个示例中,当我使用Selenium浏览器时,最后,当浏览器关闭时,进度条只会跳到100%。但是,selenium工作正常。
def test(self):
self.completed = 0
browser = webdriver.Firefox()
links = ['http://www.somesite.com/', 'http://www.somesite.com/page2',
'http://www.somesite.com/page3']
for link in links:
browser.get(link)
self.completed += 100 / len(links)
time.sleep(2)
print(link)
self.progressBar.setValue(self.completed)
browser.close()
但是,在下面的此版本中,在Selenium浏览器被注释掉的情况下,进度条可以按预期工作。
def test(self):
self.completed = 0
#browser = webdriver.Firefox()
links = ['http://www.somesite.com/', 'http://www.somesite.com/page2',
'http://www.somesite.com/page3']
for link in links:
#browser.get(link)
self.completed += 100 / len(links)
time.sleep(2)
print(link)
self.progressBar.setValue(self.completed)
#browser.close()
阻塞任务与在其中执行GUI的事件循环不友好,因为它们阻止了GUI执行的常规任务,例如票证检查,重画等。
在这些情况下,解决方案是使用线程执行阻止任务并使用信号发送信息。
import sys
from PyQt5 import QtCore, QtWidgets
from selenium import webdriver
class SeleniumWorker(QtCore.QObject):
progressChanged = QtCore.pyqtSignal(int)
def doWork(self):
progress = 0
browser = webdriver.Firefox()
links = ['http://www.somesite.com/',
'http://www.somesite.com/page2',
'http://www.somesite.com/page3']
for link in links:
browser.get(link)
progress += 100 / len(links)
self.progressChanged.emit(progress)
browser.close()
class Widget(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
QtWidgets.QWidget.__init__(self, *args, **kwargs)
lay = QtWidgets.QHBoxLayout(self)
progressBar = QtWidgets.QProgressBar()
progressBar.setRange(0, 100)
button = QtWidgets.QPushButton("Start")
lay.addWidget(progressBar)
lay.addWidget(button)
self.thread = QtCore.QThread()
self.worker = SeleniumWorker()
self.worker.moveToThread(self.thread)
self.thread.started.connect(self.worker.doWork)
button.clicked.connect(self.thread.start)
self.worker.progressChanged.connect(progressBar.setValue, QtCore.Qt.QueuedConnection)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
我对scrollview和GeometryReader有一些问题。我想要一张图片下的物品清单。每个项目都应该有以下宽度和高度: 我为我的用例尝试了两种方法。这是我的第一个代码结构: 我正在使用几何体读取器来获取VStack的宽度,因为它有一个填充,我不想获得滚动视图的全宽。 但对于GeometryReader,UI上只显示ForEach循环中的最后一项。而GeometryReader只有很小的高度
问题内容: 在我编写的flask应用程序中,我使用了一个外部库,该库可以使用环境变量进行配置。注意:我自己编写了这个外部库。因此,如有必要,我可以进行更改。从命令行运行时,运行带有以下内容的烧瓶服务器: 一切都如预期。但将它部署到Apache后,用它不工作了。事实上,打印出到(所以它在Apache日志中显示出来显示,该wsgi过程似乎是在一个非常不同的环境(一个,好像是这样了。其实,它指向我的发展
一切工作正常,正如预期的那样,但是当我添加@Builder注释时: 在生成过程中,我得到以下错误: 这是龙目虫还是我做错了什么?
我的片段包含一个viewpager,它包含一个listView 此listView行在左侧显示一个缩略图,在右侧显示一些文本。就像gmail应用一样,当我按下缩略图时,我希望它切换到ActionMode。按下其他位置时,将打开与按下的特定行相关的不同活动。这部分工作正常。 当不在actionMode中时,调用onItemClick,但一旦在actionMode中,就不再调用了... 在操作模式下,
我有一个包含特殊字符的字符串列表 它像这样工作得很好 输出 安得拉邦 卡纳塔克邦 当我使用过滤器来做这件事时 它不起作用!我把名单原封不动地拿回来了。 我期待着这样一份清单['Andhra Pradesh','Karnataka'] 我希望从字符串列表中删除特殊字符,如,和
我有一个带有Spring(5.7.2)Web/Security的REST API项目。 我只有一个表,它包含一个id和一个名称。 当我删除光盘时,我的DiscsService会 当我需要插入或更新时,我会: 我了解到,当您希望在同一事务中使用值(提交之前)时,将使用,并且将同步并清空SQL缓存。 在我的例子中,我看到我在数据库中插入/更新或删除了值。 我应该使用flush()(我认为不应该),但可