質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

659閲覧

PyQt5のTableViewを使用して、そのテーブル内のセルそれぞれにオートコンプリート機能(setCompleter)をつけたい

goki_gottan

総合スコア168

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/05/10 07:41

PyQt5のTableViewでSQLite3で引っ張ってきたデータを表出力しております。
その後、その表(テーブル)のあるセルを修正する際、修正時にオートコンプリート機能を追加できないでしょうか?

下記は、オートコンプリート機能を実装する前です。

from PyQt5.QtWidgets import * from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QAction, QTableWidget,QTableWidgetItem,QVBoxLayout,QCheckBox,QHBoxLayout,QPushButton from PyQt5.QtGui import QIcon from PyQt5 import QtGui from PyQt5.QtCore import pyqtSlot import sys import pandas as pd import sqlite3 import sip z1=r"hoge" r1="hoge.db" #テーブル名 table_="city1" conn = sqlite3.connect(z1 + '\\' + r1) c = conn.cursor() sql = "SELECT * FROM " + table_ +";" df=pd.read_sql(sql,conn) num1=len(df.columns) num2=len(df) df=df.fillna("-") data=df.to_dict(orient='list') color_style="QPushButton {background-color: #DCDCDC; height: 30px; color: black; font: 30px; border-radius: 30px;} \ QPushButton:hover {background: #708090} \ QPushButton:pressed {background: #000080}" class TableView(QTableWidget): def __init__(self, data, *args): QTableWidget.__init__(self, *args) self.data = data self.setData() self.resizeColumnsToContents() self.resizeRowsToContents() def setData(self): horHeaders = [] for n, key in enumerate(self.data.keys()): horHeaders.append(key) for m, item in enumerate(self.data[key]): newitem = QTableWidgetItem(item) self.setItem(m, n, newitem) self.setHorizontalHeaderLabels(horHeaders) class window(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.table = TableView(data, num2, num1, self) self.button = QPushButton('削除', self) self.button1 = QPushButton('修正', self) self.button2 = QPushButton('終了', self) self.button.clicked.connect(self.clickCallback) self.button1.clicked.connect(self.clickCallback1) self.button2.clicked.connect(self.clickCallback2) title = QLabel('Title') author = QLabel('Author') review = QLabel('Table') review1 = QLabel('処理') titleEdit = QLineEdit() authorEdit = QLineEdit() reviewEdit = QTextEdit() grid = QGridLayout() grid.setSpacing(10) grid.addWidget(title, 1, 0) grid.addWidget(titleEdit, 1, 1) grid.addWidget(author, 2, 0) grid.addWidget(authorEdit, 2, 1) grid.addWidget(review, 3, 0) grid.addWidget(self.table, 3, 1, 1, 3) grid.addWidget(review1, 4, 0) grid.addWidget(self.button, 4, 1,1,1) grid.setColumnStretch(1, 1) grid.addWidget(self.button1, 4, 2,1,1) grid.setColumnStretch(2, 1) grid.addWidget(self.button2, 4, 3,1,1) grid.setColumnStretch(3, 1) self.button.setStyleSheet(color_style) self.button1.setStyleSheet(color_style) self.button2.setStyleSheet(color_style) for a in range(num1): for b in range(num2): self.table.item(b,a).setBackground(QtGui.QColor(240,240,240)) self.setLayout(grid) self.setGeometry(600, 100, 850, 850) self.setWindowTitle('Review') self.show() #削除 def clickCallback(self): print(self.table.currentItem().text()) print(self.table.currentItem().row()) self.table.removeRow(self.table.currentItem().row()) #修正 def clickCallback1(self): print("なし") #終了 def clickCallback2(self): self.close() def main(): app = QApplication(sys.argv) ex = window() ex.show() sys.exit(app.exec_()) if __name__ == '__main__': main()

上記のコードに、オートコンプリート機能を追加しようと思います。
参考サイト

from PyQt5.QtWidgets import * import sys class Window(QWidget): def __init__(self): QWidget.__init__(self) layout = QGridLayout() self.setLayout(layout) names = ["Apple", "Alps", "Berry", "Cherry" ] completer = QCompleter(names) self.lineedit = QLineEdit() self.lineedit.setCompleter(completer) layout.addWidget(self.lineedit, 2, 2) app = QApplication(sys.argv) screen = Window() screen.show() sys.exit(app.exec_())

こちらを実装するために、
def initUI(self): 以下を追加してみましたが、うまくいきません。

def initUI(self): names = ["Apple", "Alps", "Berry", "Cherry" ] completer = QCompleter(names) # self.table.cellWidget.setCompleter(completer) # self.table.cell.setCompleter(completer) # self.table.setCompleter(completer) # self.table.item(1,0).setCompleter(completer)

色々と試してみましたが、AttributeError:が出て、存在しないとなります。

何卒、宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問