PyQt: изменить макет GUI после нажатия кнопки
хорошо, я прыгаю с Tkinter на PyQt, потому что PyQt просто намного более продвинутый и лучше работать. Но! У меня тут проблемы.
Я пытаюсь изменить макет GUI после нажатия одной из моих кнопок на главном экране. Я нажимаю первую кнопку главной страницы GUI, затем я хочу, чтобы она перешла на другую страницу GUI, которую я создам. Я сижу здесь часами, пытаясь найти способ сделать это - нет видео на YouTube, и я не нашел ни одного стек переполнение страниц, которые помогают. Поэтому я узнал, что есть программа Qt Designer. Мне не нравятся такие программы, поэтому, пожалуйста, постарайтесь не использовать это при ответе.
PS: Я не хочу работать с более чем одним .py файл, но если нет другого способа, я думаю, мне придется это сделать.
вот мой код до сих пор:
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()
1 ответов
решение, которое я предлагаю, основано на функции setupUi()
который генерирует Qt Designer, это отвечает за создание внутренних элементов окна.
import sys
from PyQt4.QtGui 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
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_())