Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 显示白色的窗口_Python_Pyqt5 - Fatal编程技术网

Python 显示白色的窗口

Python 显示白色的窗口,python,pyqt5,Python,Pyqt5,因此,我想制作一个自定义窗口,其中显示操作的进度。当我在没有运行函数的情况下正常显示窗口时,它会显示半秒钟的白色,但每个窗口都是这样,然后显示小部件。但是当我在函数中显示它时,小部件不会显示。下面是代码(在类中): def比较(自): 进度=比较进度() progress.ui.step.setText(“Schritt 1/3”) progress.ui.progressBar1.setMaximum(4) progress.ui.progressBar1.setValue(1) progre

因此,我想制作一个自定义窗口,其中显示操作的进度。当我在没有运行函数的情况下正常显示窗口时,它会显示半秒钟的白色,但每个窗口都是这样,然后显示小部件。但是当我在函数中显示它时,小部件不会显示。下面是代码(在类中):

def比较(自):
进度=比较进度()
progress.ui.step.setText(“Schritt 1/3”)
progress.ui.progressBar1.setMaximum(4)
progress.ui.progressBar1.setValue(1)
progress.ui.progressBar2.setValue(0)
progress.ui.progressBar2.setMaximum(10)
progress.show()
将open(self.ui.csv_c_path.text(),“r”)作为f:
old=f.readlines()
将open(self.ui.csv_path.text(),“r”)作为f:
new=f.readlines()
progress.ui.step.setText(“Schritt 2/3”)
progress.ui.progressBar1.setValue(2)
diff=difflib.ndiff(旧的、新的)
progress.ui.step.setText(“Schritt 3/3”)
progress.ui.progressBar1.setValue(3)
text=“”
x=0
对于枚举中的u,u(差异):
x+=1
progress.ui.progressBar2.setMaximum(x)
#获取新旧csv之间的差异
对于枚举中的i,s(差异):
progress.ui.progressBar2.setValue(i)
如果不是,则s[0]==“”:
text+=s
打印(文本)
message.ui.textEdit.setText(文本)
message.show()
progress.close()

问题在于,您正在执行的任务可能会在GUI线程中消耗大量时间,导致其冻结,因此您必须在新线程中执行该任务,并通过信号更新信息:

导入difflib 从functools导入缓存的_属性 导入线程 从PyQt5导入QtCore、QtWidgets 类工作者(QtCore.QObject): stepChanged=QtCore.pyqtSignal(int,int) progressChanged=QtCore.pyqtSignal(int,int) diffTextChanged=QtCore.pyqtSignal(str) def启动(自我、文件a、文件b): 穿线,穿线( 目标=自我执行, args=( 档案室, 档案室, ), daemon=True, ).start() 定义执行(自我、文件a、文件b): 差异=无 self.stepChanged.emit(1,3) 打开(文件a,“r”)为f1时: 打开(文件_b,“r”)作为f2: 行\u a=f1.readlines() 行_b=f2.readlines() self.stepChanged.emit(2,3) diff=difflib.ndiff(行a、行b) self.stepChanged.emit(3,3) 如果差异为无: 返回 大小=0 text=“” 行=[] 对于大小,枚举中的s(差异,开始=1): 行。追加 self.progressChanged.emit(0,大小) 对于i,枚举中的行(行,开始=1): self.progressChanged.emit(i,大小) 如果不是第行,则以(“”)开头: 文本+=行 self.diffTextChanged.emit(文本) 类查看器(QtWidgets.QWidget): def uuu init uuu(self,parent=None): super()。\uuuu init\uuuu(父级) lay=qtwidts.QFormLayout(自) lay.addRow(self.button) lay.addRow(“输入1”,自线编辑) lay.addRow(“输入2”,自线编辑) lay.addRow(“步骤:”,self.stepProgressBar) lay.addRow(“进度:”,self.valueProgressBar) lay.addRow(“Diff:,self.textView) self.button.clicked.connect(self.handle_clicked) self.worker.stepChanged.connect(self.handle\u step\u changed) self.worker.progressChanged.connect(self.handle\u progress\u changed) self.worker.diffTextChanged.connect(self.handle\u diff\u text) @缓存的不动产 def stepProgressBar(自): 返回qtwidts.QProgressBar(格式=“%m of%v”) @缓存的不动产 def值进度条(自身): 返回qtwidts.QProgressBar() @缓存的不动产 def按钮(自身): 返回qtwidts.QPushButton(“开始”) @缓存的不动产 def textView(自): 返回QtWidgets.QTextEdit(readOnly=True) @缓存的不动产 def lineedit_a(自身): 返回QtWidgets.QLineEdit() @缓存的不动产 def lineedit_b(自身): 返回QtWidgets.QLineEdit() @缓存的不动产 def工作人员(自我): 返回工人() 已单击def句柄(自身): self.worker.start(self.lineedit_a.text(),self.lineedit_b.text()) def句柄步骤已更改(自身、值、最大值): self.stepProgressBar.setMaximum(最大值) self.stepProgressBar.setValue(值) def句柄_进度_已更改(自身、值、最大值): self.valueProgressBar.setMaximum(最大值) self.valueProgressBar.setValue(值) def句柄差异文本(自身,文本): self.textView.setText(文本) def main(): 导入系统 app=qtwidts.QApplication(sys.argv) 视图=查看器() 查看。调整大小(640480) view.show() sys.exit(app.exec_()) 如果名称=“\uuuuu main\uuuuuuuu”: main()
问题在于,您正在执行的任务可能会在GUI线程中消耗大量时间,导致其冻结,因此您必须在新线程中执行该任务,并通过信号更新信息:

导入difflib 从functools导入缓存的_属性 导入线程 从PyQt5导入QtCore、QtWidgets 类工作者(QtCore.QObject): stepChanged=QtCore.pyqtSignal(int,int) progressChanged=QtCore.pyqtSignal(int,int) diffTextChanged=QtCore.pyqtSignal(str) def启动(自我、文件a、文件b): 穿线,穿线( 目标=自我执行, args=( 档案室, 档案室, ), daemon=True, ).start() 定义执行(自我、文件a、文件b): 差异=无 self.stepChanged.emit(1,3) 打开(文件a,“r”)为f1时: 打开(文件_b,“r”)作为f2: 行\u a=f1.readlines() 线_b=f