鱼C论坛

 找回密码
 立即注册
查看: 226|回复: 1

程序调用问题02

[复制链接]
发表于 2024-2-25 16:44:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
上个问题我没说清楚:

现有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窗体。


我自己都迷糊了,见谅~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-25 16:45:04 | 显示全部楼层
问题的现象是因为在main.py中,先创建并显示了MainWindow,然后再创建并显示了HuanYing窗体。为了实现你的要求,需要对代码进行一些修改。

首先,将main.py中的代码作如下修改:

  1. if __name__ == '__main__':
  2.     app = QApplication(sys.argv)

  3.     # 创建并显示HuanYing窗体
  4.     huanYingWindow = HuanYingWindow()
  5.     huanYingWindow.show()

  6.     # 在HuanYing窗体关闭后,再显示main窗体
  7.     sys.exit(app.exec())
复制代码


然后,在HuanYing.py的CustomProgressBar类中添加一个信号,用于指示滚动条滚动到100%时的事件:

  1. from PyQt6.QtCore import pyqtSignal

  2. class CustomProgressBar(QProgressBar):
  3.     # 定义一个滚动条滚动到100%时的信号
  4.     finishedSignal = pyqtSignal()

  5.     def __init__(self, parent=None):
  6.         # 初始化代码省略...

  7.     def _animate(self):
  8.         # 动画更新代码省略...

  9.         if value == 100:
  10.             self.finishedSignal.emit()
  11.             self.timer.stop()
复制代码


之后,在HuanYingWindow类的initUI方法中,连接CustomProgressBar的finishedSignal信号到关闭窗体的槽函数,并设置窗体关闭事件:

  1. from PyQt6.QtCore import Qt

  2. class HuanYingWindow(QWidget):
  3.     def __init__(self):
  4.         # 初始化代码省略...

  5.     def initUI(self):
  6.         # 布局代码省略...

  7.         progressBar = CustomProgressBar()
  8.         layout.addWidget(progressBar)
  9.         progressBar.scrollToCenter()
  10.         progressBar.startAnimation()

  11.         # 连接滚动条的finishedSignal信号到窗体的关闭槽函数
  12.         progressBar.finishedSignal.connect(self.close)

  13.         self.setLayout(layout)

  14.     def closeEvent(self, event):
  15.         # 阻止窗体关闭事件,以便在适当时机再关闭窗体
  16.         event.ignore()
复制代码


这样修改后,程序的运行流程如下:
1. 先创建并显示HuanYing窗体。
2. 在滚动条滚动到100%时,CustomProgressBar的finishedSignal信号被触发,调用HuanYingWindow的close槽函数关闭HuanYing窗体。
3. 在HuanYing窗体关闭后,main窗体才会显示出来。

希望以上解答对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 16:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表