最近、GUIアプリケーションを作成するためにPyQt4を使用し始めました。私はQTableWidgetを使ったアプリケーションを作ろうとしていました。これは、2列目のテーブルで、最初の列がQLineEditに設定され、2列目が代理人を使用してQListWidgetに設定されています(「設定する」が正しい用語でない場合は申し訳ありません)。QListWidget列のエントリは、 QFileDialogPyQt4でのダブルクリック行QTableWidgetはコンテンツを-1に設定します
import sys
from PyQt4.QtGui import *
from PyQt4 import uic
from PyQt4.QtCore import *
qtCreatorFile = "app_name.ui" # UI File designed using QtDesigner
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
class DelegateLEdit(QStyledItemDelegate):
def createEditor(self, parent, option, index):
line_edit = QLineEdit(parent)
return line_edit
class DelegateLWidget(QStyledItemDelegate):
def createEditor(self, parent, option, index):
list_widget = QListWidget(parent)
list_widget.setSelectionMode(QAbstractItemView.ExtendedSelection)
return list_widget
のすべては、私がQListWidget列の任意のセルをダブルクリックするたびに、その特定のセルの内容が、私は "を扱っていない。-1に設定されている。一つのことを除いて正常に動作するようです(私はそれをテキストブラウザー上のセルの内容を印刷させるようにしました)、セルをダブルクリックすると内容が-1になりました。誰もがこれを手伝ってくれますか?QTableWidgetのドキュメントを読んでみましたが、誰も私が行方不明であることを指摘してもらえますか? は、ここに私のFormクラスののinit機能です
def __init__(self):
QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
self.setWindowFlags(Qt.WindowMinimizeButtonHint)
self.list_widget = QListWidget()
self.add_button.clicked.connect(self.add_to_list)
# self.table.itemDoubleClicked.connect(self.print_cell_content)
self.table.setColumnCount(2)
first_header = "Option"
second_header = "Directories"
header = first_header + ";" + second_header
self.table.setHorizontalHeaderLabels(header.split(";"))
header = self.table.horizontalHeader()
header.setResizeMode(1, QHeaderView.ResizeToContents)
self.table.resizeColumnsToContents()
# self.table.setShowGrid(False)
self.delegate_lw = DelegateLWidget(self)
self.delegate_le = DelegateLEdit(self)
self.table.setItemDelegateForColumn(0, self.delegate_le)
self.table.setItemDelegateForColumn(1, self.delegate_lw)
EDIT:テーブルの2番目の列にファイルを追加し、追加ボタン用 ハンドラ
def add_to_list(self):
file_dialog = QFileDialog(self)
file_dialog.saveState()
file_dialog.setOption(QFileDialog.DontUseNativeDialog, True)
file_list = file_dialog.getOpenFileNames()
self.dir_list.extend(file_list)
self.dir_list = list(set(self.dir_list))
self.add_items(self.dir_list)
def add_items(self, list_items):
list_items.sort()
column = 1
self.row_count = 0
for item in list_items:
self.table.insertRow(self.row_count)
self.table.setItem(self.row_count, column, QTableWidgetItem(item))
self.row_count += 1
は
編集時に。あなたが本当に欲しいのはそれですか?または、実際に表示されるアイテムウィジェットを実際に設定したいのですか?セルをダブルクリックすると、何が起こると思いますか? – eyllanesc
に項目を追加する方法を示すことができ – ekhumoro
@ekhumoroええ、私は実際に編集時にウィジェットを表示したい。問題は、リストウィジェットのitem-delegateを使用している2番目のカラムにあります。その列のセルをダブルクリックすると、そのセルの値が-1にリセットされます。私はそれを避けることを望んでいます – 0Nicholas