pyqt主窗口调用多个同一自定义控件,启动自定义控件中的任务以及启动自定义控件中的定时器
时间: 2023-09-24 13:05:57 浏览: 98
使用pyqt 实现重复打开多个相同界面
好的,针对您的问题,我可以给您提供以下思路:
1.在主窗口中导入自定义控件的类,并为其创建实例对象。
2.在自定义控件中,定义需要启动的任务函数,并在需要启动任务的时候调用该函数。
3.在自定义控件中,定义需要启动的定时器,并在需要启动定时器的时候调用该定时器的 start() 函数。
4.在主窗口中,通过实例对象调用自定义控件中的任务函数和定时器启动函数即可。
下面是一个简单的示例代码,供您参考:
```python
# 自定义控件 CustomWidget.py
from PyQt5.QtCore import QTimer, pyqtSignal
from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout
class CustomWidget(QWidget):
taskStarted = pyqtSignal() # 自定义信号,用于任务启动时发出信号
def __init__(self, parent=None):
super().__init__(parent)
self.taskLabel = QLabel('任务未启动', self)
self.timerLabel = QLabel('定时器未启动', self)
layout = QVBoxLayout()
layout.addWidget(self.taskLabel)
layout.addWidget(self.timerLabel)
self.setLayout(layout)
self.timer = QTimer(self)
self.timer.setInterval(1000)
self.timer.timeout.connect(self.onTimerTimeout)
def startTask(self):
self.taskLabel.setText('任务已启动')
self.taskStarted.emit() # 发出任务启动信号
def startTimer(self):
self.timerLabel.setText('定时器已启动')
self.timer.start()
def onTimerTimeout(self):
print('定时器触发')
```
```python
# 主窗口 MainWindow.py
from PyQt5.QtWidgets import QMainWindow, QPushButton, QHBoxLayout, QVBoxLayout
from CustomWidget import CustomWidget
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.widget1 = CustomWidget(self)
self.widget2 = CustomWidget(self)
button1 = QPushButton('启动任务1', self)
button1.clicked.connect(self.widget1.startTask)
button2 = QPushButton('启动任务2', self)
button2.clicked.connect(self.widget2.startTask)
button3 = QPushButton('启动定时器1', self)
button3.clicked.connect(self.widget1.startTimer)
button4 = QPushButton('启动定时器2', self)
button4.clicked.connect(self.widget2.startTimer)
layout1 = QHBoxLayout()
layout1.addWidget(self.widget1)
layout1.addWidget(self.widget2)
layout2 = QHBoxLayout()
layout2.addWidget(button1)
layout2.addWidget(button2)
layout3 = QHBoxLayout()
layout3.addWidget(button3)
layout3.addWidget(button4)
layout = QVBoxLayout()
layout.addLayout(layout1)
layout.addLayout(layout2)
layout.addLayout(layout3)
centralWidget = QWidget()
centralWidget.setLayout(layout)
self.setCentralWidget(centralWidget)
```
在这个示例代码中,我们首先在 CustomWidget 类中定义了任务启动函数 startTask() 和定时器启动函数 startTimer(),并在启动任务时发出了自定义信号 taskStarted。
在 MainWindow 类中,我们导入了 CustomWidget 类,并创建了两个 CustomWidget 的实例对象 widget1 和 widget2。我们在主窗口中添加了四个按钮,分别用于启动两个自定义控件中的任务和定时器。我们通过实例对象调用 CustomWidget 中的函数来启动任务和定时器。
需要注意的是,在这个示例代码中,我们并没有实现任务的具体功能,仅仅是在任务启动时修改了标签的文字。如果您需要在任务中执行一些耗时的操作,建议使用多线程来避免阻塞主线程。
阅读全文