Layout responsive avec PYQT5
Salut ! Je cherche un moyen pour pouvoir disposer l'ensemble de mon layout comme étant responsive, c'est à dire qu'il remplit entièrement / complétement ma nouvelle fenêtre. Par exemple, j'aimerai que mon tableau au lieu d'être en haut à droite, qu'il prenne tout l'espace libre juste en-dessous des boutons.
Ce code correspond à un code publié par une personne sur ce forum que j'ai repris et modifié pour pouvoir répondre à ce que je souhaitais faire
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| import sys
from PyQt5 import (QtWidgets, QtCore, QtSql)
from PyQt5 import *
from PyQt5.QtWidgets import QApplication, QLineEdit
def ouvrebaseqt(basesql):
db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName(basesql)
if not db.open():
db = None
return db
def fermebaseqt(db):
if db!=None:
db.close()
class VoirTableSql(QtWidgets.QMainWindow):
def __init__(self, basesql, table, parent=None):
super().__init__(parent)
self.setGeometry(500, 500, 500, 500)
self.basesql = basesql
self.db = ouvrebaseqt(self.basesql)
if self.db == None:
QtWidgets.QMessageBox.critical(self, "Ouverture de la base de données", "Erreur d'ouverture")
self.close()
sys.exit()
self.table = table
self.model = QtSql.QSqlRelationalTableModel(self, self.db)
self.model.setEditStrategy(QtSql.QSqlRelationalTableModel.OnManualSubmit)
self.vuetable = QtWidgets.QTableView(self)
self.vuetable.setModel(self.model)
self.vuetable.setSortingEnabled(True)
posit = QtWidgets.QGridLayout()
self.bouton1 = QtWidgets.QPushButton("Enregistrer les modifications dans la table", self)
self.bouton1.clicked.connect(self.appliquer)
posit.addWidget(self.bouton1, 0, 0)
self.setCentralWidget(QtWidgets.QFrame())
posit.addWidget(self.vuetable, 1, 0)
self.centralWidget().setLayout(posit)
self.model.setTable(self.table)
self.model.select()
self.vuetable.setItemDelegate(QtSql.QSqlRelationalDelegate(self.vuetable))
self.vuetable.resizeColumnsToContents()
self.vuetable.resizeRowsToContents()
def appliquer(self):
if self.model.submitAll():
self.vuetable.resizeColumnsToContents()
self.vuetable.resizeRowsToContents()
QtWidgets.QMessageBox.information(self, "Enregistrement des modifications", "Enregistrement terminé")
else:
QtWidgets.QMessageBox.warning(self, "Enregistrement des modifications", "Erreur: %s" % self.model.lastError().text())
def closeEvent(self, event=None):
fermebaseqt(self.db)
event.accept() |
Ce code correspond à la fenêtre dans laquelle j'appelle VoirSqlTableau, pour pouvoir afficher les résultats compris dans la table en question, ici Matériel
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QVBoxLayout, QWidget
from SQL import VoirTableSql
import sys
class MaterielWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Gestion des matériaux")
self.setGeometry(500, 500, 560, 500)
self.depart = QPushButton("Retour au menu de départ")
self.ajouter = QPushButton("Ajouter un nouveau matériel")
self.supprimer = QPushButton("Supprimer un matériel")
layout = QVBoxLayout()
layout.addWidget(self.depart)
layout.addWidget(self.ajouter)
layout.addWidget(self.supprimer)
layout.addWidget(VoirTableSql("Result/StockTelecom", "Materiel"))
self.depart.clicked.connect(self.Main)
self.ajouter.clicked.connect(self.Ajouter)
self.supprimer.clicked.connect(self.Supprimer)
self.setLayout(layout) |