すばらしいです。 QTreeWidgetItemのそれぞれに10個のボタンを含むQWidgetを配置して展開できます。QTreeWidget - 行の内容ごとの行の高さを再計算しますか?
私がQWidgetを非表示にすると、その行は同じ高さのままです。表示されていないボタンだけを含むためには、サイズをもっと小さくする必要があります。行が占めるスペースは空のままです。新しいウィジェットを追加したときのみ。行の高さが再計算されます。同じことが拡大のために行く。私がウィジェットを展開すると、まだ17ピクセルの高さです。新しいウィジェットを追加した場合にのみ、行の高さが再計算されます。コンテンツ、または私は各項目をループする必要がありますし、手動でその高さを調整 -
は、私はその行の高さを更新するために呼び出すことができQTreeWidgetの組み込み機能はありますか?
また、QTreeWidgetItem内にレイアウトとたくさんのウィジェットを含むQWidgetを配置することをお勧めしますか?私は500のQtreeWidgetItemsを言うことができたら、それぞれに20個のButtons/etcアイテムを持つQTreeWidgetを持っていますか?
よろしく ダリウス
EDIT1。
私はかなりの時間を費やしています。異なる道を試しましたが、これまでの運はありません。問題を示すために私の大雑把なコードを付けました。 1〜2回隠すだけで、何が起こるかご覧いただけます。私は "sizeHint"シンジがどのように機能するのか理解するのに苦労しています...
以下のテストを添付しました。
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
sys._excepthook = sys.excepthook
def my_exception_hook(exctype, value, traceback):
# print(exctype, value, traceback)
sys._excepthook(exctype, value, traceback)
sys.exit(1)
sys.excepthook = my_exception_hook
class myWidget(QWidget):
def __init__(self, parent, something):
super(QWidget, self).__init__()
self.MW = parent
self.MWa = something
self.lay_main = QGridLayout()
self.setLayout(self.lay_main)
self.le_lineA = QLineEdit()
self.btn_a = QPushButton("Hey")
self.btn_a.clicked.connect(self.hideunhide)
self.subWidget = QWidget()
self.subLay = QGridLayout()
self.subWidget.setLayout(self.subLay)
self.btn_b = QPushButton("Boo")
self.lay_main.addWidget(self.btn_a)
self.lay_main.addWidget(self.subWidget)
self.subLay.addWidget(self.le_lineA)
self.subLay.addWidget(self.btn_b)
print("Im created :-)")
self.size = False
def hideunhide(self):
if self.subWidget.isHidden():
self.subWidget.show()
self.size = True
self.MW.sizeHint(1)
self.MW.setSizeHint(0, QSize(0, 0))
else:
self.subWidget.hide()
self.size = False
self.MW.sizeHint(1)
self.MW.setSizeHint(0, QSize(0, 0))
class widgetItemDictUpdate(QTreeWidgetItem):
def __init__(self, parent, MW, title, dicId):
super(QTreeWidgetItem, self).__init__(parent)
self.MW = MW
self.dicId = dicId
class myDelegate(QItemDelegate):
def __init__(self, mw):
self.MW = mw
super(QItemDelegate, self).__init__()
def sizeHint(self, option, index):
print("myDelegate", option, index)
if self.MW.itemFromIndex(index).layer.size:
return QSize(100, 100)
return QSize(100, 30)
class treeWidget(QTreeWidget):
def __init__(self, MW):
QTreeWidget.__init__(self)
self.setUniformRowHeights(False)
self.MW = MW
self.itemClicked.connect(self.printClick)
self.setHeaderItem(QTreeWidgetItem(["Name", "ProgressBar", "extra", "", "", "", "", "", "", "", ""]))
self.setDragDropMode(QAbstractItemView.InternalMove)
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.dragItems = []
self.lastHidenItemsArray = []
self.hiddenItemsSet = []
self.delg = myDelegate(self)
self.setItemDelegate(self.delg)
self.addItems(self.invisibleRootItem())
def printClick(self, item, column):
print("Clicked")
def addItems(self, parent):
testParent = self.addSlave(parent, 'RandomA', 50)
testParent = self.addSlave(parent, 'RandomB', 60)
testParent = self.addSlave(parent, 'RandomBX', 60)
testParent = self.addSlave(parent, 'RandomBcvas', 60)
def addSlave(self, parent, title, id, expanded=True, visible=True):
item = widgetItemDictUpdate(parent, self, title, id)
myLayer = myWidget(item, self)
item.setText(0, title)
item.layer = myLayer
self.setItemWidget(item, 1, myLayer)
item.id = id
item.type = 1
return item
class Window(QWidget):
def __init__(self):
QWidget.__init__(self)
self.treeWidget = treeWidget(self)
layout = QVBoxLayout()
layout.addWidget(self.treeWidget)
self.setLayout(layout)
self.setGeometry(1000, 500, 500, 500)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
ちょっと@Dariusz。 QTableWidgets/QTableViewsには、QTableWidget :: setRowHeight(int index、int height)関数を使用して変更できる動的行高さが組み込まれていることが分かりました。あなたはQTreeWidgetを使用してロックされていますか、代わりにQTableWidgetを使用できますか? – aatwo
ちょっと@aatwo。この問題について再度作業を開始しました。 QTableWidgetsが動作するかどうかわからない場合は、QTreeWidgetのように行を上/下/グループに移動できますか?私はいくつかの基本的なテストを試みたが、これまでの運は – Dariusz
それはあなたのデータの構造によって異なります。 QTreeViewsの機能のツリー部分を実際に使用している場合、つまり、1つ以上の行が別の行の子である場合、残念ながら、あなたはかなりロックされています。行の高さに対する優れたコントロールを指摘したかっただけです!あなたは間違いなく列を上下に動かすことができます。 – aatwo