PyQt:单击按钮后更改 GUI 布局 [英] PyQt: Change GUI Layout after button is clicked

查看:49
本文介绍了PyQt:单击按钮后更改 GUI 布局的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好的,我要从 Tkinter 跳到 PyQt,因为 PyQt 更先进,而且更好用.但!我在这里遇到了一些麻烦.

Okay, I am jumping from Tkinter to PyQt, because PyQt is just so much more advanced, and nicer to work with. BUT! I am having some troubles here.

我在按下主屏幕上的一个按钮后尝试更改 GUI 布局.我按下主 GUI 页面的第一个按钮,然后我希望它转到我将创建的另一个 GUI 页面.我已经在这里坐了几个小时试图找到某种方法来做到这一点 - YouTube 上没有视频,我也没有找到任何有帮助的堆栈溢出页面.所以我了解到有一个Qt Designer程序.我不喜欢那样的程序,所以请尽量避免在回答时使用它.

I am trying to change the GUI layout after I press one of my buttons on the main screen. I press the first button of the main GUI page, then I want it to go to another GUI page that I will create. I have been sitting here for hours trying to find some way to do this - no videos on YouTube, and I haven't found any stack-overflow pages that help. So I learnt that there is a Qt Designer program. I don't like programs like that, so please try to stay away from using that when answering.

PS:我不想使用多个 .py 文件,但如果没有其他方法,我想我将不得不这样做.

PS: I don't want to be working with more than one .py file, but if there is no other way, I guess I'm going to have to do so.

这是我目前的代码:

class Window(QtGui.QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50, 50, 400, 450)
        self.setFixedSize(400,450)
        self.setWindowTitle(" Tool")
        self.setWindowIcon(QtGui.QIcon('PhotoIcon.png'))
        self.home()

    def home(self):
        ToolsBTN = QtGui.QPushButton('text', self)
        ToolsBTN.clicked.connect(ToolTab)
        ToolsBTN.move(50, 350)
        CPSBTN = QtGui.QPushButton('text', self)
        CPSBTN.clicked.connect(QtCore.QCoreApplication.instance().quit)
        CPSBTN.move(150, 350)
        CreatorBTN = QtGui.QPushButton('Creator', self)
        CreatorBTN.clicked.connect(QtCore.QCoreApplication.instance().quit)
        CreatorBTN.move(250, 350)
        self.show()

class ToolTab(QtGui.QMainWindow):

    def __init__2(self):
        super(ToolTab, self).__init__2()
        self.setGeometry(50, 50, 400, 450)
        self.setFixedSize(400,450)
        self.setWindowTitle(" Tool")
        self.setWindowIcon(QtGui.QIcon('PhotoIcon.png'))
        self.Toolsgui()

    def Toolsgui(self):
        CPSBTN = QtGui.QPushButton('123', self)
        CPSBTN.clicked.connect(QtCore.QCoreApplication.instance().quit)
        CPSBTN.move(150, 300)
        self.show()

def Run():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    GUITOOL = ToolTab()
    sys.exit(app.exec_())

Run()

推荐答案

我提出的解决方案是基于生成 Qt Designer 的函数 setupUi(),它负责创建 Qt Designer 的内部元素窗户.

The solution I propose is based on the function setupUi() that generates Qt Designer, this is responsible for creating the internal elements of the window.

import sys

from PyQt4.QtGui import QApplication, QMainWindow, QPushButton, QWidget
#For PyQt5 :
#from PyQt5.QWidgets import QApplication , QMainWindow , QPushButton , QWidget
class UIWindow(object):
    def setupUI(self, MainWindow):
        MainWindow.setGeometry(50, 50, 400, 450)
        MainWindow.setFixedSize(400, 450)
        MainWindow.setWindowTitle("UIWindow")
        self.centralwidget = QWidget(MainWindow)
        # mainwindow.setWindowIcon(QtGui.QIcon('PhotoIcon.png'))
        self.ToolsBTN = QPushButton('text', self.centralwidget)
        self.ToolsBTN.move(50, 350)
        MainWindow.setCentralWidget(self.centralwidget)


class UIToolTab(object):
    def setupUI(self, MainWindow):
        MainWindow.setGeometry(50, 50, 400, 450)
        MainWindow.setFixedSize(400, 450)
        MainWindow.setWindowTitle("UIToolTab")
        self.centralwidget = QWidget(MainWindow)
        self.CPSBTN = QPushButton("text2", self.centralwidget)
        self.CPSBTN.move(100, 350)
        MainWindow.setCentralWidget(self.centralwidget)


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.uiWindow = UIWindow()
        self.uiToolTab = UIToolTab()
        self.startUIWindow()

    def startUIToolTab(self):
        self.uiToolTab.setupUI(self)
        self.uiToolTab.CPSBTN.clicked.connect(self.startUIWindow)
        self.show()

    def startUIWindow(self):
        self.uiWindow.setupUI(self)
        self.uiWindow.ToolsBTN.clicked.connect(self.startUIToolTab)
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    sys.exit(app.exec_())

开始:

点击按钮后:

点击另一个按钮后:

更优雅的解决方案:

import sys

from PyQt4.QtGui import QApplication, QMainWindow, QPushButton, QWidget
#For PyQt5 :
#from PyQt5.QWidgets import QApplication , QMainWindow , QPushButton , QWidget

class UIWindow(QWidget):
    def __init__(self, parent=None):
        super(UIWindow, self).__init__(parent)
        # mainwindow.setWindowIcon(QtGui.QIcon('PhotoIcon.png'))
        self.ToolsBTN = QPushButton('text', self)
        self.ToolsBTN.move(50, 350)


class UIToolTab(QWidget):
    def __init__(self, parent=None):
        super(UIToolTab, self).__init__(parent)
        self.CPSBTN = QPushButton("text2", self)
        self.CPSBTN.move(100, 350)


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setGeometry(50, 50, 400, 450)
        self.setFixedSize(400, 450)
        self.startUIToolTab()

    def startUIToolTab(self):
        self.ToolTab = UIToolTab(self)
        self.setWindowTitle("UIToolTab")
        self.setCentralWidget(self.ToolTab)
        self.ToolTab.CPSBTN.clicked.connect(self.startUIWindow)
        self.show()

    def startUIWindow(self):
        self.Window = UIWindow(self)
        self.setWindowTitle("UIWindow")
        self.setCentralWidget(self.Window)
        self.Window.ToolsBTN.clicked.connect(self.startUIToolTab)
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    sys.exit(app.exec_())

这篇关于PyQt:单击按钮后更改 GUI 布局的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆