2017-11-23 2 views
0

Ich versuche, eine Pyqt GUI mit mehreren Elementen zu machen und ich bin mir nicht sicher, wie ich das formatieren sollte. Grundsätzlich möchte ich drei Dropdown-Menüs am oberen Rand der Seite, und wenn eine Option ausgewählt ist, zeigt es eine sqlite3-Datenbanktabelle mit dem Widget qtableview. Irgendeine Hilfe, wie ich die Drop-Downs formatieren kann? (Oder irgendwelche guten Ressourcen für die Formatierung von Pyqt im Allgemeinen?) Danke!PyQt Formatierung dropdowns

Edit: Hier ist, was ich versucht:

self.com_btn = QComboBox('Com') 
    self.sec_btn = QComboBox('Sec') 
    self.sto_btn = QComboBox('Sto') 

    self.hbox = QHBoxLayout() 
    self.hbox.addStretch(1) 
    self.hbox.addWidget(self.com_btn) 
    self.hbox.addWidget(self.sec_btn) 
    self.hbox.addWidget(self.sto_btn) 
    self.setLayout(self.hbox) 

bearbeiten: Bild

enter image description here

+0

Ihre Frage, wie es breit ist, empfehle ich Ihnen zeigen, was Sie ausprobiert haben seit Fragen dieser Art sind in der Regel geschlossen. – eyllanesc

+0

Schreiben Sie keinen Code in die Kommentare, [bearbeiten Sie Ihre Frage] (https://Stackoverflow.com/posts/47448063/edit) und fügen Sie ihn dort hinzu – eyllanesc

+0

QComboBox unterscheidet sich von einem QPushButton, ** QComboBox hat nicht das angeklickte Signal weil es kein Knopf ist **. – eyllanesc

Antwort

0

Für das Design ist zu beobachten, dass die QComboBox in der gleichen Reihe sind so wird QHBoxLayout() verwendet, und dann platzieren wir dieses Layout mit der QTableView mit einer QVBoxLayout().

, um eine Verknüpfung der Tabellen zum QComboBox ein Modell verwendet wird, in diesem Fall QSqlTableModel, wo der Name der Tabelle angegeben ist, und auch die Spalte, die mit setModel(), setTable() und setModelColumn() gezeigt werden müssen.

from PyQt5.QtWidgets import * 
from PyQt5.QtSql import * 

class Widget(QWidget): 
    def __init__(self, *args, **kwargs): 
     QWidget.__init__(self, *args, **kwargs) 
     vlay = QVBoxLayout(self) 
     hlay = QHBoxLayout() 

     self.tv = QTableView(self) 
     self.com_btn = QComboBox(self) 
     self.sec_btn = QComboBox(self) 
     self.sto_btn = QComboBox(self) 
     hlay.addWidget(self.com_btn) 
     hlay.addWidget(self.sec_btn) 
     hlay.addWidget(self.sto_btn) 

     model1 = QSqlTableModel(self) 
     model1.setTable("table0") 
     model1.select() 
     self.com_btn.setModel(model1) 
     self.com_btn.setModelColumn(2) 

     model2 = QSqlTableModel(self) 
     model2.setTable("table1") 
     model2.select() 
     self.sec_btn.setModel(model2) 
     self.sec_btn.setModelColumn(1) 

     model3 = QSqlTableModel(self) 
     model3.setTable("table2") 
     model3.select() 
     self.sto_btn.setModel(model3) 
     self.sto_btn.setModelColumn(0) 

     vlay.addLayout(hlay) 
     vlay.addWidget(self.tv) 

def createConnection(): 
    db = QSqlDatabase.addDatabase('QSQLITE') 
    db.setDatabaseName(':memory:') 
    if not db.open(): 
     QMessageBox.critical(None, "Cannot open database", 
       "Unable to establish a database connection.\n" 
       "This example needs SQLite support. Please read the Qt SQL " 
       "driver documentation for information how to build it.\n\n" 
       "Click Cancel to exit.", 
       QMessageBox.Cancel) 
     return False 

    query = QSqlQuery() 
    for i in range(3): 
     query.exec_("create table table{i} (field{i}_0, field{i}_1 varchar(20), field{i}_2 varchar(20))".format(i=i)) 
     for j in range(10): 
      query.exec_("insert into table{i} values('value{i}{j}', 'value{i}{j}', 'value{i}{j}')".format(i=i, j=j)) 
    return True 



if __name__ == '__main__': 

    import sys 

    app = QApplication(sys.argv) 
    if not createConnection(): 
     sys.exit(1) 

    w = Widget() 
    w.show() 

    sys.exit(app.exec_())