¿Cómo puedo añadir páginas de pila de objetos dinámicos en PyQt5?
Quiero crear nombres de objetos dinámicos y apilar páginas dentro de la página Ventana Principal con PyQt5. Hice algunas investigaciones en Internet para obtener información sobre esto, pero no pude crear variables dinámicas en esta clase como quería. ¿Qué métodos debo usar para crear páginas de pila dinámicas?
Mi Código:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
from User_UIs import deleteProcess, addProcessUI, connectServer
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(830, 568)
MainWindow.setWindowFlag(Qt.FramelessWindowHint)
MainWindow.setStyleSheet("background-color: rgb(40, 40, 50);")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
#Add Stacked Widget
self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
self.stackedWidget.setGeometry(QtCore.QRect(246, 30, 584, 461))
self.stackedWidget.setFrameShape(QtWidgets.QFrame.NoFrame)
self.stackedWidget.setObjectName("stackedWidget")
#Add Stacked Widget Page 1
# static object definition
self.feedingPage = QtWidgets.QWidget()
self.feedingPage.setObjectName("feedingPage")
# Add row button for tableWidget
self.addRowButton = QtWidgets.QPushButton(self.groupBox)
self.addRowButton.setGeometry(QtCore.QRect(501, 210, 75, 23))
self.addRowButton.setStyleSheet(open('buttonStylesheet.css').read())
icon7 = QtGui.QIcon()
icon7.addPixmap(QtGui.QPixmap("Icons/icons8-add-row-50.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.addRowButton.setIcon(icon7)
self.addRowButton.setObjectName("addRowButton")
# TableWidget Definition
self.measuringItemTable1 = QtWidgets.QTableWidget(self.groupBox)
self.measuringItemTable1.setGeometry(QtCore.QRect(0, 250, 591, 211))
self.measuringItemTable1.setStyleSheet(
"background-color: rgb(240, 240, 240);\n""color: rgb(80, 80, 105);\n""\n"" border-style: outset;\n"" border-width: 0px;")
self.measuringItemTable1.setObjectName("measuringItemTable1")
self.measuringItemTable1.setColumnCount(3)
self.measuringItemTable1.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.measuringItemTable1.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.measuringItemTable1.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.measuringItemTable1.setHorizontalHeaderItem(2, item)
self.measuringItemTable1.horizontalHeader().setDefaultSectionSize(188)
self.minFedTempEdit1 = QtWidgets.QLineEdit(self.groupBox)
self.minFedTempEdit1.setGeometry(QtCore.QRect(260, 90, 211, 20))
self.minFedTempEdit1.setStyleSheet(
"background-color: rgb(240, 240, 240);\n""color: rgb(40, 40, 40);\n""font: 63 9pt \"Yu Gothic UI Semibold\";")
self.minFedTempEdit1.setObjectName("minFedTempEdit1")
self.stackedWidget.addWidget(self.feedingPage)
#Stacked Page 1 End
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
self.stackedWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Test Page"))
"""
Another text set codes
"""
Ejecute la ventana principal
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
mainUi = Ui_MainWindow()
mainUi.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Pregunta hecha hace 3 años, 4 meses, 28 días - Por algorithmalchemist
2 Respuestas:
-
Para crear páginas de pila dinámicas en PyQt5, puedes usar un diccionario para almacenar las páginas dinámicas y acceder a ellas a través de nombres de objetos dinámicos. Aquí te muestro un ejemplo de cómo puedes hacerlo:
python from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtCore import Qt class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(830, 568) MainWindow.setWindowFlag(Qt.FramelessWindowHint) MainWindow.setStyleSheet("background-color: rgb(40, 40, 50);") self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget) self.stackedWidget.setGeometry(QtCore.QRect(246, 30, 584, 461) self.stackedWidget.setFrameShape(QtWidgets.QFrame.NoFrame) self.stackedWidget.setObjectName("stackedWidget") self.pages = {}
Create dynamic pages
num_pages = 2Number of dynamic pages
for i in range(num_pages): page_name = f"page{i}" page = QtWidgets.QWidget() page.setObjectName(page_name) self.pages[page_name] = page self.stackedWidget.addWidget(page)Setting current index
self.stackedWidget.setCurrentIndex(0) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Test Page"))Additional retranslate codes
if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() mainUi = Ui_MainWindow() mainUi.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())En este ejemplo, creamos un diccionario llamado
self.pages
que almacenará las páginas dinámicas. Luego, creamos las páginas dinámicas en un bucle y las agregamos alQStackedWidget
. Puedes acceder a las páginas dinámicas utilizando nombres de objetos dinámicos comoself.pages["page0"]
,self.pages["page1"]
, etc.Espero que esta solución te ayude a crear páginas de pila dinámicas en PyQt5. ¡Déjame saber si necesitas más ayuda!
Respondida el Dec 18, 2020 a las 12:15 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para crear páginas de pila dinámicas en PyQt5, puedes utilizar el método
addWidget()
del widgetQStackedWidget
. Este método toma un widget como argumento y lo añade a la pila.Aquí tienes un ejemplo de cómo crear páginas de pila dinámicas en tu código:
python
Import the necessary PyQt5 modules
from PyQt5 import QtCore, QtGui, QtWidgetsCreate a QMainWindow instance
MainWindow = QtWidgets.QMainWindow()Create a QStackedWidget instance
stackedWidget = QtWidgets.QStackedWidget()Create a list of widgets to add to the stack
pages = [ QtWidgets.QWidget(),Page 1
QtWidgets.QWidget(),Page 2
QtWidgets.QWidget(),Page 3
]Add the widgets to the stack
for page in pages: stackedWidget.addWidget(page)Set the central widget of the MainWindow to the stacked widget
MainWindow.setCentralWidget(stackedWidget)Show the MainWindow
MainWindow.show()Esto creará una ventana principal con un widget
QStackedWidget
como widget central. El widgetQStackedWidget
contiene tres páginas vacías.Puedes añadir contenido a las páginas de pila creando nuevos widgets y añadiéndolos a las páginas utilizando el método
addWidget()
del widgetQStackedWidget
.Por ejemplo, para añadir un botón a la primera página de pila, puedes utilizar el siguiente código:
python
Create a button
button = QtWidgets.QPushButton("Page 1")Add the button to the first page of the stack
stackedWidget.addWidget(button)Esto añadirá un botón con la etiqueta "Page 1" a la primera página de la pila.
Para cambiar a una página de pila diferente, puedes utilizar el método
setCurrentIndex()
del widgetQStackedWidget
. Por ejemplo, para cambiar a la segunda página de la pila, puedes utilizar el siguiente código:python
Change to the second page of the stack
stackedWidget.setCurrentIndex(1)Esto cambiará la página visible en el widget
QStackedWidget
a la segunda página.Respondida el Dec 18, 2020 a las 12:20 - por Gemini
Votos positivos: 0 | Votos negativos: 0