亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在函數內部“打印”pyqt5?

如何在函數內部“打印”pyqt5?

牧羊人nacy 2023-08-22 10:47:11
我正在創建一個程序(用于網頁抓?。蚁雱摻ㄒ粋€地方來顯示腳本正在做什么(因為它已經可以通過控制臺上的打印來實現),但在 PyQt5 textEdit 中。(該腳本位于 python 文件的函數內部)然而,當函數/腳本運行時,GUI 崩潰并且直到函數/腳本結束才顯示任何內容。我做了一個簡化版本來幫助理解問題并使其更容易解決。如果它適用于這個,那么它可能也適用于另一個。Python文件print('iniciando programa...')from PyQt5 import uic, QtWidgetsimport timedef F_exemplof(): #function thats print index in 2 seconds    for a in range(20):        print('Print index: ' + str(a))        W_exemplogui.textEdit.append('Print index: ' + str(a))        time.sleep(2)# Importing the GUIapp = QtWidgets.QApplication([])W_exemplogui = uic.loadUi('testegui.ui')# ButtonsW_exemplogui.pushButton.clicked.connect(F_exemplof)#W_exemplogui.pushButton_2.clicked.connect()# Show windowW_exemplogui.show()app.exec()測試GUI.ui<?xml version="1.0" encoding="UTF-8"?><ui version="4.0"> <class>MainWindow</class> <widget class="QMainWindow" name="MainWindow">  <property name="geometry">   <rect>    <x>0</x>    <y>0</y>    <width>383</width>    <height>304</height>   </rect>  </property>  <property name="windowTitle">   <string>MainWindow</string>  </property>  <widget class="QWidget" name="centralwidget">   <layout class="QGridLayout" name="gridLayout" rowstretch="0">    <item row="0" column="0">     <widget class="QFrame" name="frame">      <property name="styleSheet">       <string notr="true">background-color: rgb(90, 90, 90);</string>      </property>      <property name="frameShape">       <enum>QFrame::StyledPanel</enum>      </property>      <property name="frameShadow">       <enum>QFrame::Raised</enum>      </property>      <layout class="QGridLayout" name="gridLayout_2">       <item row="1" column="1">        <widget class="QPushButton" name="pushButton">         <property name="styleSheet">          <string notr="true">color: rgb(255, 255, 255);</string>         </property>         <property name="text">          <string>Iniciar</string>         </property>
查看完整描述

1 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

耗時的任務必須在輔助線程中執行,以避免阻塞 GUI,并且必須使用信號將信息發送到主線程。


import threading

import time


from PyQt5 import uic, QtCore, QtWidgets



class Task(QtCore.QObject):

    messageChanged = QtCore.pyqtSignal(str)


    def start(self):

        threading.Thread(target=self._execute, daemon=True).start()


    def _execute(self):

        for a in range(20):

            print("Print index: " + str(a))

            self.messageChanged.emit("Print index: " + str(a))

            time.sleep(2)



def main():

    app = QtWidgets.QApplication([])

    W_exemplogui = uic.loadUi("testegui.ui")

    task = Task()

    W_exemplogui.pushButton.clicked.connect(task.start)

    task.messageChanged.connect(W_exemplogui.textEdit.append)

    W_exemplogui.show()

    app.exec_()



if __name__ == "__main__":

    main()


查看完整回答
反對 回復 2023-08-22
  • 1 回答
  • 0 關注
  • 4001 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號