程序调用问题02
上个问题我没说清楚:现有3个窗体代码如下:
1、main.py
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "main"))
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow = QWidget()
Ui_Form().setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec())
2、HuanYing.py
from CustomProgressBar import CustomProgressBar
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
class MyForm(QtWidgets.QWidget, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
myForm = MyForm()
myForm.show()
sys.exit(app.exec())
3、import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QProgressBar, QLabel
from PyQt6.QtCore import QTimer, Qt
class CustomProgressBar(QProgressBar):
def __init__(self, parent=None):
super().__init__(parent)
self.setStyleSheet(
"""
QProgressBar {
text-align: center;/* 将文本居中对齐 */
color: white;/* 设置文本颜色为白色 */
border: none;
background-color: #909090;/* 设置背景色 */
height: 20px;/* 设置进度条高度 */
}
QProgressBar::chunk {
background-color: #00A3E0;/* 设置进度条颜色 */
}
"""
)
self.setTextVisible(True)# 显示进度文本
# self.counter = 0
self.setValue(0)
def scrollToCenter(self):
max_value = self.maximum()
if max_value > 0:
self.setValue(max_value)
def startAnimation(self):
self.timer = QTimer(self)
self.timer.timeout.connect(self._animate)
self.timer.start(100)
def _animate(self):
value = self.value() + 2
if value > self.maximum():
value = value % self.maximum()
self.setValue(value)
if value == 100:
self.timer.stop()
class HuanYingWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
layout = QVBoxLayout(self)
progressBar = CustomProgressBar()
layout.addWidget(progressBar)
progressBar.scrollToCenter()
progressBar.startAnimation()
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = HuanYingWindow()
window.show()
sys.exit(app.exec())
其第2段代码HuanYing.py有调用一个滚动条CustomProgressBar(代码3)。
现在的问题是:1、main程序运行时main窗体先显示出来了,然后HuanYing窗体也显示出来了。。。
2、我的要求是首先不显示main窗体,待HuanYing窗体的代码3滚动条到100%时关闭HuanYing窗体,然后再显示main窗体。
我自己都迷糊了,见谅~~
问题的现象是因为在main.py中,先创建并显示了MainWindow,然后再创建并显示了HuanYing窗体。为了实现你的要求,需要对代码进行一些修改。
首先,将main.py中的代码作如下修改:
if __name__ == '__main__':
app = QApplication(sys.argv)
# 创建并显示HuanYing窗体
huanYingWindow = HuanYingWindow()
huanYingWindow.show()
# 在HuanYing窗体关闭后,再显示main窗体
sys.exit(app.exec())
然后,在HuanYing.py的CustomProgressBar类中添加一个信号,用于指示滚动条滚动到100%时的事件:
from PyQt6.QtCore import pyqtSignal
class CustomProgressBar(QProgressBar):
# 定义一个滚动条滚动到100%时的信号
finishedSignal = pyqtSignal()
def __init__(self, parent=None):
# 初始化代码省略...
def _animate(self):
# 动画更新代码省略...
if value == 100:
self.finishedSignal.emit()
self.timer.stop()
之后,在HuanYingWindow类的initUI方法中,连接CustomProgressBar的finishedSignal信号到关闭窗体的槽函数,并设置窗体关闭事件:
from PyQt6.QtCore import Qt
class HuanYingWindow(QWidget):
def __init__(self):
# 初始化代码省略...
def initUI(self):
# 布局代码省略...
progressBar = CustomProgressBar()
layout.addWidget(progressBar)
progressBar.scrollToCenter()
progressBar.startAnimation()
# 连接滚动条的finishedSignal信号到窗体的关闭槽函数
progressBar.finishedSignal.connect(self.close)
self.setLayout(layout)
def closeEvent(self, event):
# 阻止窗体关闭事件,以便在适当时机再关闭窗体
event.ignore()
这样修改后,程序的运行流程如下:
1. 先创建并显示HuanYing窗体。
2. 在滚动条滚动到100%时,CustomProgressBar的finishedSignal信号被触发,调用HuanYingWindow的close槽函数关闭HuanYing窗体。
3. 在HuanYing窗体关闭后,main窗体才会显示出来。
希望以上解答对你有帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]