Ich habe vor kurzem begonnen, PyQt4 für die Erstellung von GUI-Anwendungen zu verwenden. Ich habe versucht, eine Anwendung zu erstellen, in der ich das QTableWidget verwendet habe. Es ist eine zweispaltige Tabelle, in der die erste Spalte auf QLineEdit gesetzt wurde und die zweite Spalte mit Delegaten auf QListWidget gesetzt wurde (Entschuldigung, wenn "set to" nicht die korrekte Terminologie ist.) Die Einträge in der QListWidget-Spalte stammen aus der Listenausgabe eines QFileDialogDoppelklick auf Zeile auf PyQt4 QTableWidget setzt den Inhalt auf -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
Alles gut zu funktionieren mit einer Ausnahme scheint. Jedes Mal, wenn ich auf eine beliebige Zelle in der Spalte klicken QListWidget verdoppeln, werden die Inhalte dieser bestimmten Zelle auf -1. ich habe die "nicht behandelt doubleClicked "Signal. Selbst wenn ich es getan habe (ich habe es den Inhalt der Zelle auf einem TextBrowser drucken), Doppelklick auf die Zelle setzen Sie den Inhalt auf -1. Kann mir bitte jemand dabei helfen? Ich habe versucht, lesen Sie die QTableWidget Dokumentation aber Ich fand keinen Erfolg. Kann jemand bitte darauf hinweisen, was ich vermisse?Hierist die init Funktion meiner Form-Klasse
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: Handler für Schaltfläche Hinzufügen, die Dateien in der zweiten Spalte der Tabelle
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
Sie fügt Vielen
Sie konnten zeigen, wie Elemente in die Tabelle hinzuzufügen – eyllanesc
Sie scheinen die Artikel-Delegierten werden mit einem benutzerdefinierten Editor zu schaffen, die nur sichtbar ist, beim Bearbeiten. Willst du das wirklich? Oder möchten Sie eigentlich ein Objekt-Widget einstellen, das jederzeit sichtbar ist? Was erwarten Sie, wenn Sie in eine Zelle doppelklicken? – ekhumoro
@ekhumoro yeah, ich möchte eigentlich, dass das Widget beim Bearbeiten sichtbar ist. Das Problem liegt in der zweiten Spalte, in der ich den Element-Delegaten für das Listen-Widget verwende. Wenn ich auf eine Zelle in dieser Spalte doppelklicke, wird der Wert dieser Zelle auf -1 zurückgesetzt. Ich hoffe, dies zu vermeiden – 0Nicholas