、 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_())
あなたの質問は広く、このタイプの質問は一般的に閉鎖されているので、試したことを示すことをお勧めします。 – eyllanesc
コメントにコードを入れないでください([あなたの質問を編集])(https://stackoverflow.com/posts/47448063/edit) – eyllanesc
QComboBoxはQPushButtonとは異なります。** QComboBoxはクリックされた信号を持っていませんそれはボタンではないから**。 – eyllanesc