私はPythonを学び、父を助けるためのプログラムを書こうとしています。私はそれをExcelのようにしたいと思っており、今のところ見栄えがしますが、誰かがクロールダウンしている間にtableWidgetの行(列ではなく)の数を増やす方法がわかりません... QtDesignerまたは私は.pyファイルにコードを書く必要がありますか?どんな助けでもありがたいです...私がばかげた質問をしているなら申し訳ありませんが、私は本当に初心者です...
1 に答える
以下は、概念実証の例のようなものです。
class Widget(QtGui.QWidget):
def __init__(self):
super(Widget, self).__init__()
self.resize(600,400)
layout = QtGui.QVBoxLayout(self)
self.table = QtGui.QTableWidget(20,10)
self.vBar = self.table.verticalScrollBar()
self._vBar_lastVal = self.vBar.value()
layout.addWidget(self.table)
self.vBar.valueChanged.connect(self.scrollbarChanged)
def scrollbarChanged(self, val):
bar = self.vBar
minVal, maxVal = bar.minimum(), bar.maximum()
avg = (minVal+maxVal)/2
rowCount = self.table.rowCount()
# scrolling down
if val > self._vBar_lastVal and val >= avg:
self.table.insertRow(rowCount)
# scrolling up
elif val < self._vBar_lastVal:
lastRow = rowCount-1
empty = True
for col in xrange(self.table.columnCount()):
item = self.table.item(lastRow, col)
if item and item.text():
empty=False
break
if empty:
self.table.removeRow(lastRow)
self._vBar_lastVal = val
テーブル ウィジェットの垂直スクロール バーに依存して、値の変化に関する情報を通知する必要があります。valueChanged(int)
そのため、その信号をメソッドに接続します。
SLOT はスクロールバーのscrollbarChanged
値を受け取ります。ここで行っているのは、その時点でのスクロールバーの最小値と最大値をチェックし、現在の位置が少なくとも中央にあるかどうかを確認することです。また、ダウン スクロールでのみ行を追加する必要があるため、現在のスクロール バーの値が前回よりも大きいかどうかも確認します。これらの条件が真の場合、新しい行を挿入します。
最後の行をチェックして空であることを確認し、そうである場合にのみ削除する必要があると確信しているため、縮小する操作はもう少し複雑です。私のバージョンでは大まかなアイデアが得られますが、数学ロジックにはおそらくさらに作業が必要になるでしょう。しかし、それがしていることは、最後の行のすべての項目を調べて、その値が None か空の値かを確認することです。行全体が空の場合は、それを削除します。したがって、上にスクロールすると縮小効果が得られます。
これが出発点になることを願っています!パーツの詳細な説明が必要な場合は、コードについてお気軽にお問い合わせください。