0

QtableWidget を QScrollArea (1 つのウィジェットのみ) 内に配置して、垂直方向および水平方向にスクロールできるようにしようとしています ( Qtablewidget でスクロールバーを使用しない理由があります)。ただし、tableWidget がウィンドウ内に収まらない場合でもスクロールバーが表示されないため、 を設定QtCore.Qt.ScrollBarAlwaysOnしましたが、現在は表示されていますが、灰色でスクロールできません。

これが私のコードです:

class Table(QtGui.QDialog):
    def __init__(self, parent=None):
        super(Table, self).__init__(parent)
        layout = QtGui.QGridLayout() 
        tableWidget = QtGui.QTableWidget()
        #.... set up and populate tableWidget here 1000rows-10col ....
        myScrollArea = QtGui.QScrollArea()
        myScrollArea.setWidgetResizable(True)
        myScrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        myScrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        myScrollArea.setWidget(tableWidget)
        layout.addWidget(myScrollArea)
        self.setLayout(layout)
        self.setMinimumSize(1000, 700)

私は PyQt の初心者で、レイアウトとコンテナーをよく理解していないため、何が間違っているのかわかりません。私を正しい方向に向けてください、助けていただければ幸いです。

4

2 に答える 2

1

QtScrollBar には、デフォルトで水平スクロールバーと垂直スクロールバーがあります。tablewidget には、デフォルトで水平および垂直の scrollBar があります。だから私はそれをやり遂げました。サイズ変更イベントを使用するだけで、テーブルウィジェットの幅と高さが変更されました。

class MainWin(QtGui.QDialog):
def __init__(self,parent=None):
    QtGui.QDialog.__init__(self,parent)

    self.table =QtGui.QTableWidget(100,4)
    self.table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
    self.table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)

    lay = QtGui.QGridLayout()
    self.sc = QtGui.QScrollArea()
    self.sc.setWidget(self.table)
    lay.addWidget(self.sc,0,0)
    self.setLayout(lay)


def resizeEvent(self,event):
    self.table.resize(self.sc.width(),self.sc.height())




def main():
    app=QtGui.QApplication(sys.argv)
    win=MainWin()
    win.show()
    sys.exit(app.exec_())

main()
于 2013-06-29T11:58:18.700 に答える
0

私はついにそれを手に入れました:テーブルの列/行をデータに合わせて調整するためにresizeColumnsToContents()andresizeRowsToContents()を使用しました-テキストですが、それはテーブル自体と同じことをしません-テーブルの高さと幅は同じままです。したがって、テーブルを行と列の周りにサイズ設定するために、これを使用しました:

self.table.resizeRowsToContents()
self.table.resizeColumnsToContents()   
self.table.setFixedSize(self.table.horizontalHeader().length(), self.table.verticalHeader().length())

QScrollArea のスクロールバーでテーブル全体をスクロールできるようになりました。

于 2013-07-01T09:29:34.980 に答える