在PyQt5中显示和隐藏多个窗口

2024-05-29 02:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个使用UI的项目,并开始使用PyQt5。到目前为止,我看了很多视频,阅读了一些教程,并在项目上取得了进展。由于PyQt是一个C++的Python绑定,对于很多Windows的复杂UI来说,没有太多的文档。(或者我找不到它,也有PyQT5的例子)。我的项目包含很多窗口。我试图从用户那里获取一些参数,由于用户参数,优化算法将起作用。所以这个项目包含了这些窗口

  1. 登录窗口(Qwidgets){first view}
  2. 登录注册窗口(Qwidgets){如果用户没有帐户,请第二次查看}
  3. 如果用户登录到系统选项卡widget将显示4个子选项卡视图,这些选项卡将从用户获取参数。在这个小部件中,已经有2个子选项卡具有用户可以选择的值,但是也有一些按钮可以用OK和CANCEL按钮打开新的Qwidget类窗口。一个用于选择文件目录的选项卡,我在这里使用了QfileDialog类。最后一个选项卡从用户获取最后一个参数并打开用户在第三个选项卡中选择的文件。在
  4. 在Tab view之后,我打开了一个Plotview,其中有用户选择的文件,在这个窗口中,用户通过绘制一些多边形来给出plot的参数{Im using Pyqtgraph library here}
  5. 优化算法是有效的,它与Pyqt无关

我在设计用户界面时主要使用Qt设计器。但后来改变了它,添加了一些方法来获取用户的参数,并用于连接其他选项卡或其他窗口。在

通过在类(窗口)中定义方法,我可以打开其他窗口,但不能隐藏或关闭已经打开的窗口。如果我试图关闭它们,所有进程都会停止,但我想关闭唯一的窗口。我有这个问题在登录注册窗口,弹出窗口采取额外的参数从用户在第一和第二选项卡视图。我的主要开始与登录窗口。然后在Loginwindow中,如果登录成功,它将转到tabview窗口。我打字很成功主窗口.隐藏()并显示tabview窗口。但是在所有弹出窗口中,我不能关闭接受用户参数的弹出窗口。在

因为代码太长了,我就把感兴趣的部分放在这里。在

class LoginUp(object):

   def setupUi(self,LoginUp):
        self.Buton1.clicked.connect(self.signup)
        self.Buton2.clicked.connect(self.tabview)
   def signup(self):
        # here it shows but user cant close it by just clicking on OK button 
        # He must click on x button to close which I dont want.
        self.signupshow = QtWidgets.QWidget()                                  
        self.ui = LoginSignUp()
        self.ui.setupUi(self.signupshow)
        self.signupshow.show()

   def tabview(self):  # Here its works
        self.tabviewshow = QtWidgets.QWidget()
        self.ui_tabview = TabView()
        self.ui_tabview.setupUi(self.tabviewshow)
        MainWindow.close()
        self.tabviewshow.show()
class TabView(object):

    def setupUi(self,Form):
        self.button3.clicked.connect(self.addargument)

    def addargument(self):
        # same problem.. after that it popups window that user can give inputs but cant close the window AddArgument class 
        self.Add = QtWidgets.QWidget()
        self.addargumentshow = AddArgument()
        self.addargumentshow.setupUi(self.Add)
        self.addargumentshow.show()

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QWidget()
    ui = LoginUp()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Tags: 项目用户selfuiclose参数defshow
1条回答
网友
1楼 · 发布于 2024-05-29 02:19:57

解决这个问题的一种方法是使用另一个类作为要显示的所有窗口的控制器。在

在每个窗口中,当你想切换窗口时,你会发送一个信号,这取决于这个控制器类来决定在接收到信号时如何处理信号并决定显示哪个窗口。任何需要传递的参数都可以通过信号传递。在

Here is a simplified complete working example。在

相关问题 更多 >

    热门问题