有两个按钮(1 和 2)。
单击按钮 1 将启动script_1.py文件,该文件执行一项长任务。
按钮 2 启动script_2.py,它也执行一个长任务。
问题是在script_1.py被执行之前,按钮 1 不会运行script_2.py。需要添加什么以使按钮 2 不等待script_1.py完成执行?
主文件
import sys
from PyQt5.QtWidgets import QDialog, QApplication
from PyQt5.uic import loadUi
import os
class New(QDialog):
def __init__(self):
super(New, self).__init__()
loadUi("form.ui", self)
self.FB_1.clicked.connect(self.file_1)
self.FB_2.clicked.connect(self.file_2)
def file_1(self):
os.system("script_1.py")
def file_2(self):
os.system("script_2.py")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = New()
window.show()
sys.exit(app.exec_())
表单.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>160</width>
<height>280</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>160</width>
<height>280</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>160</width>
<height>280</height>
</size>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 223, 255, 255), stop:1 rgba(25, 58, 73, 255));</string>
</property>
<property name="sizeGripEnabled">
<bool>false</bool>
</property>
<property name="modal">
<bool>false</bool>
</property>
<widget class="QGroupBox" name="groupBox_7">
<property name="geometry">
<rect>
<x>5</x>
<y>5</y>
<width>150</width>
<height>270</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>270</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>270</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 223, 255, 255), stop:0.9801 rgba(29, 34, 36, 255));</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QVideoWidget" name="VIDEO_widget" native="true">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>150</width>
<height>270</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>270</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>270</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(0, 0, 0);</string>
</property>
<widget class="QPushButton" name="FB_1">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>60</width>
<height>40</height>
</rect>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>50</height>
</size>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">QPushButton {
background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(107, 134, 255, 255), stop:1 rgba(185, 241, 255, 255));
border-color: #8F8F91;
border-style: outset;
border-width: 4px;
border-radius: 10px;
}
QPushButton:default {
border-color: royalblue; /* make the default button prominent */
}
QPushButton:pressed {
background-color: white;
border-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop: 0.199005 rgba(29, 43, 65, 255), stop:1 rgba(255, 255, 255, 255));
border-style: inset;
}</string>
</property>
<property name="text">
<string>1</string>
</property>
<property name="iconSize">
<size>
<width>40</width>
<height>40</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="FB_2">
<property name="geometry">
<rect>
<x>80</x>
<y>20</y>
<width>60</width>
<height>40</height>
</rect>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>50</height>
</size>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">QPushButton {
background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(107, 134, 255, 255), stop:1 rgba(185, 241, 255, 255));
border-color: #8F8F91;
border-style: outset;
border-width: 4px;
border-radius: 10px;
}
QPushButton:default {
border-color: royalblue; /* make the default button prominent */
}
QPushButton:pressed {
background-color: white;
border-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop: 0.199005 rgba(29, 43, 65, 255), stop:1 rgba(255, 255, 255, 255));
border-style: inset;
}</string>
</property>
<property name="text">
<string>2</string>
</property>
<property name="iconSize">
<size>
<width>40</width>
<height>40</height>
</size>
</property>
</widget>
</widget>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>QVideoWidget</class>
<extends>QWidget</extends>
<header>PyQt5.QtMultimediaWidgets</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
该类
QProcess
用于启动外部程序并与它们进行通信。更多https://doc.qt.io/qt-5/qprocess.html