清風 发表于 2024-2-26 17:45:54

如何实时取得所调用滚动条的值?

现在有代码1.HuanYing.py如下:

from CustomProgressBar import CustomProgressBar

class Ui_Form(object):
    def setupUi(self, Form):
      Form.setObjectName("Form")
      Form.resize(1440, 900)

      ......

      # 添加滚动条到布局容器
      self.progressBar = CustomProgressBar(parent=self.verticalLayoutWidget_4)
      self.progressBar.scrollToCenter()
      self.progressBar.startAnimation()
      self.verticalLayout_4.addWidget(self.progressBar)

   def showSuccessMessage(self):
      msgBox = QtWidgets.QMessageBox()
      msgBox.setText("登录成功!欢迎使用本报表统计系统!")
      msgBox.setWindowTitle("成功")
      icon = QtGui.QIcon()
      icon.addPixmap(QtGui.QPixmap("success.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
      msgBox.setWindowIcon(icon)
      msgBox.exec()
      
      self.progressBar.setValue(0)
      self.progressBar.show()#此处滚动条开始从0滚动到100%

      当滚动条值为100%时,此处如何实现关闭HuanYing窗体。打开mian窗体。

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myForm = MyForm()
    myForm.show()
    sys.exit(app.exec())

代码2. main.py

class Ui_Form(object):
    def setupUi(self, Form):
      Form.setObjectName("Form")
      Form.resize(1440, 900)

       ...
if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QWidget()
    Ui_Form().setupUi(MainWindow)
    MainWindow.show()

sys.exit(app.exec())


代码3.CustomProgressBar.py
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.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)
      self.progressBar = CustomProgressBar()
      layout.addWidget(self.progressBar)
      self.progressBar.scrollToCenter()
      self.progressBar.startAnimation()
      self.setLayout(layout)

      self.showProgressBarValue()

    def showProgressBarValue(self):
      value = self.progressBar.value()
      print(value)

      if value < 100:
            QTimer.singleShot(100, self.showProgressBarValue)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = HuanYingWindow()
    window.show()
    sys.exit(app.exec())

回复请注意python格式
      

FishC 发表于 2024-2-26 17:46:31

要实时获取滚动条的值,可以使用以下方法:

1. 在CustomProgressBar.py中添加一个方法`getValue(self)`,用于返回当前滚动条的值:
class CustomProgressBar(QProgressBar):
    ...

    def getValue(self):
      return self.value()

2. 在HuanYing.py的`showSuccessMessage`函数中,调用滚动条的`getValue`方法,判断滚动条的值是否为100,如果是则关闭HuanYing窗体,打开main窗体:
def showSuccessMessage(self):
    ...
    self.progressBar.setValue(0)
    self.progressBar.show()

    while self.progressBar.getValue() < 100:
      pass# 等待滚动条的值达到100

    # 关闭HuanYing窗体
    Form.close()

    # 打开main窗体
    MainWindow.show()

注意,在等待滚动条的值达到100时,我们采取了一个循环来等待,该循环在滚动条的值达到100之前会一直卡住。这种方式并不是最好的实现方法,但由于您的代码结构比较复杂,其他方法可能涉及到更多的改动。

此外,代码中还有一些问题需要修正:

1. HuanYingWindow类的initUI方法中多了一个setLayout(layout)的代码,应该去掉。

2. HuanYing.py中导入的模块有缺失,需要添加:
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QProgressBar, QTimer

修改后的代码如下:

HuanYing.py:
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QProgressBar, QMessageBox
from PyQt5.QtGui import QIcon
from main import Ui_Form as MainUi_Form

from CustomProgressBar import CustomProgressBar

class Ui_Form(object):
    def setupUi(self, Form):
      ...

    def showSuccessMessage(self):
      msgBox = QMessageBox()
      msgBox.setText("登录成功!欢迎使用本报表统计系统!")
      msgBox.setWindowTitle("成功")
      icon = QIcon()
      icon.addPixmap(QtGui.QPixmap("success.png"), QIcon.Mode.Normal, QIcon.State.Off)
      msgBox.setWindowIcon(icon)
      msgBox.exec()
      
      self.progressBar.setValue(0)
      self.progressBar.show()

      while self.progressBar.getValue() < 100:
            pass

      # 关闭HuanYing窗体
      Form.close()

      # 打开main窗体
      mainForm = QWidget()
      mainUI = MainUi_Form()
      mainUI.setupUi(mainForm)
      mainForm.show()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    myForm = Ui_Form()
    myForm.show()
    sys.exit(app.exec())

CustomProgressBar.py:
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QProgressBar

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.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()

    def getValue(self):
      return self.value()

class HuanYingWindow(QWidget):
    def __init__(self):
      super().__init__()
      self.initUI()

    def initUI(self):
      layout = QVBoxLayout(self)
      self.progressBar = CustomProgressBar()
      layout.addWidget(self.progressBar)
      self.progressBar.scrollToCenter()
      self.progressBar.startAnimation()
      self.setLayout(layout)

      self.showProgressBarValue()

    def showProgressBarValue(self):
      value = self.progressBar.getValue()
      print(value)

      if value < 100:
            QTimer.singleShot(100, self.showProgressBarValue)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = HuanYingWindow()
    window.show()
    sys.exit(app.exec())

main.py:
from PyQt5.QtWidgets import QApplication, QWidget

class Ui_Form(object):
    def setupUi(self, Form):
      ...

if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QWidget()
    Ui_Form().setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec())

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-26 19:46:33

FishC 发表于 2024-2-26 17:46
要实时获取滚动条的值,可以使用以下方法:

1. 在CustomProgressBar.py中添加一个方法`getValue(self)` ...

"在等待滚动条的值达到100时,我们采取了一个循环来等待,该循环在滚动条的值达到100之前会一直卡住。这种方式并不是最好的实现方法,但由于您的代码结构比较复杂,其他方法可能涉及到更多的改动。"

有没有更好的方法?

FishC 发表于 2024-2-26 19:47:00

清風 发表于 2024-02-26 19:46
"在等待滚动条的值达到100时,我们采取了一个循环来等 ...

是的,有更好的方法可以实现等待滚动条值达到100时再执行某些操作,而不需要使用循环来卡住程序。以下是一种更好的方法:

1. 在CustomProgressBar.py中添加一个信号`valueChanged`,用于在滚动条的值改变时发射信号:from PyQt5.QtCore import pyqtSignal
class CustomProgressBar(QProgressBar):
    # 添加信号
    valueChanged = pyqtSignal(int)
   
    ...
   
    def _animate(self):
      value = self.value() + 2
      if value > self.maximum():
            value = value % self.maximum()
      self.setValue(value)
      # 发射信号
      self.valueChanged.emit(value)
      if value == 100:
            self.timer.stop()

2. 在HuanYing.py的`showSuccessMessage`函数中连接滚动条的信号`valueChanged`到相应的槽函数,在滚动条的值达到100时执行相应的操作:def showSuccessMessage(self):
    ...

    self.progressBar.valueChanged.connect(self.onProgressBarValueChanged)

    self.progressBar.setValue(0)
    self.progressBar.show()

def onProgressBarValueChanged(self, value):
    if value == 100:
      # 关闭HuanYing窗体
      Form.close()
      # 打开main窗体
      MainWindow.show()

注意,这种方法使用了信号与槽的机制,当滚动条的值改变时会自动触发连接的槽函数。通过连接滚动条的信号到槽函数,我们可以在滚动条的值达到100时执行相应的操作,而不需要使用循环来卡住程序。

修改后的代码如下:

HuanYing.py:

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QMessageBox
from PyQt5.QtGui import QIcon
from main import Ui_Form as MainUi_Form
from CustomProgressBar import CustomProgressBar

class Ui_Form(object):
    def setupUi(self, Form):
      ...
      
    def showSuccessMessage(self):
      msgBox = QMessageBox()
      msgBox.setText("登录成功!欢迎使用本报表统计系统!")
      msgBox.setWindowTitle("成功")
      icon = QIcon()
      icon.addPixmap(QtGui.QPixmap("success.png"), QIcon.Mode.Normal, QIcon.State.Off)
      msgBox.setWindowIcon(icon)
      msgBox.exec()

      self.progressBar.valueChanged.connect(self.onProgressBarValueChanged)

      self.progressBar.setValue(0)
      self.progressBar.show()

    def onProgressBarValueChanged(self, value):
      if value == 100:
            # 关闭HuanYing窗体
            Form.close()
            # 打开main窗体
            MainWindow.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myForm = Ui_Form()
    myForm.show()
    sys.exit(app.exec())

CustomProgressBar.py:

from PyQt5.QtCore import QTimer, pyqtSignal
from PyQt5.QtWidgets import QProgressBar

class CustomProgressBar(QProgressBar):
    # 添加信号
    valueChanged = pyqtSignal(int)

    def __init__(self, parent=None):
      super().__init__(parent)
      ...

    def _animate(self):
      value = self.value() + 2
      if value > self.maximum():
            value = value % self.maximum()
      self.setValue(value)
      # 发射信号
      self.valueChanged.emit(value)
      if value == 100:
            self.timer.stop()

    ...

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-26 22:21:32

FishC 发表于 2024-2-26 19:47
是的,有更好的方法可以实现等待滚动条值达到100时再执行某些操作,而不需要使用循环来卡住程序。以下 ...

滚动条到100%时 HuanYing窗体倒是关闭了,可MainWindow窗体没打开

进程已结束,退出代码为 -1073740791 (0xC0000409)

FishC 发表于 2024-2-26 22:21:47

清風 发表于 2024-02-26 22:21
滚动条到100%时 HuanYing窗体倒是关闭了,可MainWindo ...

非常抱歉,我在之前的解答中犯了一个错误。在`onProgressBarValueChanged`槽函数中,我们应该实例化主窗体`MainWindow`并调用`setupUi`方法来进行初始化,而不是直接调用`show`方法。修改后的代码如下:

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QMessageBox
from PyQt5.QtGui import QIcon
from main import Ui_Form as MainUi_Form
from CustomProgressBar import CustomProgressBar

class Ui_Form(object):
    def setupUi(self, Form):
      ...

    def showSuccessMessage(self):
      msgBox = QMessageBox()
      msgBox.setText("登录成功!欢迎使用本报表统计系统!")
      msgBox.setWindowTitle("成功")
      icon = QIcon()
      icon.addPixmap(QtGui.QPixmap("success.png"), QIcon.Mode.Normal, QIcon.State.Off)
      msgBox.setWindowIcon(icon)
      msgBox.exec()
      self.progressBar.valueChanged.connect(self.onProgressBarValueChanged)
      self.progressBar.setValue(0)
      self.progressBar.show()

    def onProgressBarValueChanged(self, value):
      if value == 100:
            # 关闭HuanYing窗体
            Form.close()
            # 打开main窗体
            MainWindow = QWidget()
            mainUI = MainUi_Form()
            mainUI.setupUi(MainWindow)
            MainWindow.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myForm = Ui_Form()
    myForm.show()
    sys.exit(app.exec())

只需将打开主窗体的代码移到`onProgressBarValueChanged`槽函数中,并确保正确地实例化主窗体对象和调用`setupUi`方法即可。

再次非常抱歉带来的困扰,感谢您的耐心指正。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-26 22:25:15

FishC 发表于 2024-2-26 22:21
非常抱歉,我在之前的解答中犯了一个错误。在`onProgressBarValueChanged`槽函数中,我们应该实例化主 ...

这次有报错:
myForm.show()
    ^^^^^^^^^^^
AttributeError: 'Ui_Form' object has no attribute 'show'

FishC 发表于 2024-2-26 22:25:35

清風 发表于 2024-02-26 22:25
这次有报错:
myForm.show()
    ^^^^^^^^^^^
Attr ...

非常抱歉,我给出的代码有误。在之前的解答中,我错误地将`Ui_Form`作为主窗体的类使用了。实际上,`Ui_Form`是由Qt Designer生成的用于创建界面的类,而不是用于显示和管理窗体的类。

以下是修正后的代码示例:

from PyQt5.QtWidgets import QApplication, QWidget
from main import Ui_Form as MainUi_Form
from CustomProgressBar import CustomProgressBar

class HuanYingWindow(QWidget):
    def __init__(self):
      super().__init__()
      self.initUI()

    def initUI(self):
      layout = QVBoxLayout(self)
      self.progressBar = CustomProgressBar()
      layout.addWidget(self.progressBar)
      self.progressBar.scrollToCenter()
      self.progressBar.startAnimation()
      self.setLayout(layout)
      self.showProgressBarValue()

    def showProgressBarValue(self):
      value = self.progressBar.getValue()
      print(value)
      if value < 100:
            QTimer.singleShot(100, self.showProgressBarValue)
      else:
            self.close()
            MainWindow = QWidget()
            mainUI = MainUi_Form()
            mainUI.setupUi(MainWindow)
            MainWindow.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = HuanYingWindow()
    window.show()
    sys.exit(app.exec())

请注意,在这种情况下,我们使用`HuanYingWindow`类作为启动界面,并在滚动条的值达到100时关闭自身窗体并打开主窗体`MainWindow`。

再次对之前的错误表示歉意,并感谢您的指正。希望这次的回答能够解决您的问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-26 22:28:43

FishC 发表于 2024-2-26 22:25
非常抱歉,我给出的代码有误。在之前的解答中,我错误地将`Ui_Form`作为主窗体的类使用了。实际上,`Ui ...

怎么又把1楼的问题推翻了?   不要改变HuanYing的窗体设置条件啊,否则我又要迷糊了

FishC 发表于 2024-2-26 22:29:00

清風 发表于 2024-02-26 22:28
怎么又把1楼的问题推翻了?   不要改变HuanYing的窗体 ...

非常抱歉给您带来困惑。看起来我误解了您的问题。如果您想保持原始的`HuanYingWindow`窗体设置,只需要修改`showSuccessMessage`函数中的代码即可。以下是修正后的代码示例:from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QMessageBoxfrom PyQt5.QtGui import QIconfrom main import Ui_Form as MainUi_Formfrom CustomProgressBar import CustomProgressBarclass Ui_Form(object):    def setupUi(self, Form):      ...    def showSuccessMessage(self):      msgBox = QMessageBox()      msgBox.setText("登录成功!欢迎使用本报表统计系统!")      msgBox.setWindowTitle("成功")      icon = QIcon()      icon.addPixmap(QtGui.QPixmap("success.png"), QIcon.Mode.Normal, QIcon.State.Off)      msgBox.setWindowIcon(icon)      msgBox.exec_()                self.progressBar.setValue(0)      self.progressBar.show()      while self.progressBar.getValue() < 100:            app.processEvents()      # 关闭HuanYing窗体      sys.exit(app.exec_())if __name__ == "__main__":    app = QApplication(sys.argv)    myForm = Ui_Form()    myForm.show()    sys.exit(app.exec_())请注意,我修改了`showSuccessMessage`函数中等待滚动条值达到100的方法。现在我使用了`app.processEvents()`来处理窗口事件,以允许滚动条的值实时更新。这样,当滚动条值达到100时,就会继续执行后续代码,即关闭`HuanYing`窗体和打开`Main`窗体。希望这次的回答能够满足您的需求。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-26 22:29:44

FishC 发表于 2024-2-26 22:29
非常抱歉给您带来困惑。看起来我误解了您的问题。如果您想保持原始的`HuanYingWindow`窗体设置,只需要 ...

回复请注意python格式

FishC 发表于 2024-2-26 22:30:04

清風 发表于 2024-02-26 22:29
回复请注意python格式

非常抱歉给您带来困惑,下面是修正后的代码示例:

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QMessageBox
from PyQt5.QtGui import QIcon
from main import Ui_Form as MainUi_Form
from CustomProgressBar import CustomProgressBar

class Ui_Form(object):
    def setupUi(self, Form):
      ...

    def showSuccessMessage(self):
      msgBox = QMessageBox()
      msgBox.setText("登录成功!欢迎使用本报表统计系统!")
      msgBox.setWindowTitle("成功")
      icon = QIcon()
      icon.addPixmap(QtGui.QPixmap("success.png"), QIcon.Mode.Normal, QIcon.State.Off)
      msgBox.setWindowIcon(icon)
      msgBox.exec_()

      self.progressBar.setValue(0)
      self.progressBar.show()

      while self.progressBar.getValue() < 100:
            app.processEvents()

      # 关闭HuanYing窗体
      sys.exit(app.exec_())

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myForm = Ui_Form()
    myForm.show()
    sys.exit(app.exec())

在`while`循环中,我使用了`app.processEvents()`来处理窗口事件,以允许滚动条的值实时更新。当滚动条的值达到100时,就会继续执行后续的代码,包括关闭`HuanYing`窗体和打开`Main`窗体。

希望这次的回答能够满足您的需求。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-26 22:32:21

FishC 发表于 2024-2-26 22:30
非常抱歉给您带来困惑,下面是修正后的代码示例:




HuanYing.py最后,
if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)   
    myForm = MyForm()
    myForm.show()
    sys.exit(app.exec())


   “myForm = MyForm()” 改为“myForm = Ui_Form()”才报错的
   

FishC 发表于 2024-2-26 22:32:34

清風 发表于 2024-02-26 22:32
HuanYing.py最后,
if __name__ == "__main__":

...

非常抱歉给您带来困惑,是我在回答中犯了一个错误。确实,根据您的代码,`myForm = Ui_Form()`才是正确的写法。

下面是修正后的代码示例:

from PyQt5.QtWidgets import QApplication, QWidget
from HuanYing import Ui_Form as HuanYingUi_Form
from main import Ui_Form as MainUi_Form

if __name__ == '__main__':
    app = QApplication(sys.argv)
   
    huanYingWindow = QWidget()
    huanYingUI = HuanYingUi_Form()
    huanYingUI.setupUi(huanYingWindow)
   
    mainWindow = QWidget()
    mainUI = MainUi_Form()
    mainUI.setupUi(mainWindow)

    huanYingWindow.show()
    sys.exit(app.exec())

抱歉再次给您带来困扰,请使用修正后的代码。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-26 22:33:44

FishC 发表于 2024-2-26 22:32
非常抱歉给您带来困惑,是我在回答中犯了一个错误。确实,根据您的代码,`myForm = Ui_Form()`才是正确 ...

不行我又迷糊了我重开一贴来问吧

FishC 发表于 2024-2-26 22:33:55

清風 发表于 2024-02-26 22:33
不行我又迷糊了我重开一贴来问吧

非常抱歉给您带来困扰,如果您还有其他问题,请随时向我提问。我会尽力帮助您解决问题。祝您编程愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-26 22:35:38

FishC 发表于 2024-2-26 22:33
非常抱歉给您带来困扰,如果您还有其他问题,请随时向我提问。我会尽力帮助您解决问题。祝您编程愉快! ...

上述问题应该出在“# 打开main窗体
            MainWindow = QWidget()
            mainUI = MainUi_Form()
            mainUI.setupUi(MainWindow)
            MainWindow.show()”   

FishC 发表于 2024-2-26 22:35:54

清風 发表于 2024-02-26 22:35
上述问题应该出在“# 打开main窗体
            Main ...

如果您在打开`main`窗体的代码中遇到问题,可以尝试以下方法进行调整:

1. 首先,请确保您已经正确导入了`MainUi_Form`和`QWidget`类:
from main import Ui_Form as MainUi_Form
from PyQt5.QtWidgets import QWidget

2. 然后,您需要创建一个`MainWindow`实例,并调用`setupUi`方法来设置界面布局,最后使用`show()`方法显示窗体:
MainWindow = QWidget()
mainUI = MainUi_Form()
mainUI.setupUi(MainWindow)
MainWindow.show()

请注意,上述代码假设`setupUi`方法是在`Ui_Form`类中定义的。如果您的代码不一样,请根据实际情况进行相应的修改。

如果问题仍然存在,请提供更多的代码和错误信息,这样我才能更好地帮助您解决问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-26 22:40:05

FishC 发表于 2024-2-26 22:35
如果您在打开`main`窗体的代码中遇到问题,可以尝试以下方法进行调整:

1. 首先,请确保您已经正确 ...

这次有报错了:

line 13, in <module>
    from main import Ui_Form as MainUi_Form
line 407, in <module>
    sys.exit(app.exec())
             ^^^
NameError: name 'app' is not defined

FishC 发表于 2024-2-26 22:40:37

清風 发表于 2024-02-26 22:40
这次有报错了:

line 13, in
    from main impo ...

报错提示`NameError: name 'app' is not defined`意味着您没有定义变量名`app`。请确保在调用`sys.exit(app.exec())`之前,已经正确创建并定义了`app`变量。以下是修正后的代码示例:HuanYing.py:PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QProgressBar, QMessageBoxfrom PyQt5.QtGui import QIconfrom main import Ui_Form as MainUi_Formfrom CustomProgressBar import CustomProgressBarclass Ui_Form(object):    def setupUi(self, Form):      ...    def showSuccessMessage(self):      msgBox = QMessageBox()      msgBox.setText("登录成功!欢迎使用本报表统计系统!")      msgBox.setWindowTitle("成功")      icon = QIcon()      icon.addPixmap(QtGui.QPixmap("success.png"), QIcon.Mode.Normal, QIcon.State.Off)      msgBox.setWindowIcon(icon)      msgBox.exec()                self.progressBar.setValue(0)      self.progressBar.show()      while self.progressBar.getValue() < 100:            pass      # 关闭HuanYing窗体      Form.close()      # 打开main窗体      app = QApplication.instance()      if app is None:            app = QApplication([])      mainForm = QWidget()      mainUI = MainUi_Form()      mainUI.setupUi(mainForm)      mainForm.show()      sys.exit(app.exec())main.py:PyQt5.QtWidgets import QApplication, QWidgetclass Ui_Form(object):    def setupUi(self, Form):      ...if __name__ == '__main__':    app = QApplication(sys.argv)    MainWindow = QWidget()    Ui_Form().setupUi(MainWindow)    MainWindow.show()    sys.exit(app.exec())通过在`HuanYing.py`中添加以下代码,您将会创建一个`QApplication`实例,并使用`QApplication.instance()`来获取应用程序实例:= QApplication.instance()if app is None:    app = QApplication([])这样就解决了`NameError: name 'app' is not defined`的问题。请注意,这段代码在获取应用程序实例之前检查是否已经存在实例。如果已经存在,则直接使用现有实例;如果不存在,则创建一个新的实例。这样可以保证在多次运行相同代码时,只会创建一个应用程序实例。这样修改后,您应该可以顺利地打开`main`窗体了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1] 2
查看完整版本: 如何实时取得所调用滚动条的值?