2017-11-23 6 views
0

私はいくつかの要素を持つpyqt guiを作成しようとしていますが、どのようにこれを書式設定するべきかはわかりません。基本的には、ページ上部に3つのドロップダウンメニューボタンがあり、オプションが選択されると、qtableviewウィジェットを持つsqlite3データベーステーブルが表示されます。どのように私はドロップダウンをフォーマットすることができますか? (または一般的なpyqtをフォーマットするための良いリソース?)ありがとう!PyQtの書式設定のドロップダウン

編集:ここでは、私が試したものです:

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) 

編集:QComboBoxが同じ行にそうQHBoxLayout()が使用されていることが観察されたデザインのために画像

enter image description here

+0

あなたの質問は広く、このタイプの質問は一般的に閉鎖されているので、試したことを示すことをお勧めします。 – eyllanesc

+0

コメントにコードを入れないでください([あなたの質問を編集])(https://stackoverflow.com/posts/47448063/edit) – eyllanesc

+0

QComboBoxはQPushButtonとは異なります。** QComboBoxはクリックされた信号を持っていませんそれはボタンではないから**。 – eyllanesc

答えて

0

QVBoxLayout()のQTableViewでそのレイアウトを配置します。 QComboBoxモデルにテーブルをリンクする

は、テーブルの名前が示され、この場合QSqlTableModelで、使用され、またsetModel()setTable()setModelColumn()と示されなければならないカラムです。

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_())