TableWigdetのみを含む小さなダイアログを書きました。どのようにしてテーブルの水平サイズを決定できますか?私はテーブルが水平スクロールバーなしで表示されるようにダイアログウィンドウのサイズを変更したいです。TableWidgetを含むダイアログウィンドウの最適なサイズを設定する
5
A
答えて
4
私が知る限り、簡単な方法はありません。テーブルの列の幅を合計し、ヘッダーにスペースを追加する必要があります。また、垂直スクロールバーとウィジェットフレームのためのスペースを追加する必要があります。ここではそれを行うための一つの方法は、あなたが(十分な私は願っていますコメントし)そのようなものを使用することができ、
class myTableWidget(QtGui.QTableWidget):
def sizeHint(self):
width = 0
for i in range(self.columnCount()):
width += self.columnWidth(i)
width += self.verticalHeader().sizeHint().width()
width += self.verticalScrollBar().sizeHint().width()
width += self.frameWidth()*2
return QtCore.QSize(width,self.height())
6
です:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class MyTableWidget(QTableWidget):
def __init__(self, x, y, parent = None):
super(MyTableWidget, self).__init__(x, y, parent)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
# To force the width to use sizeHint().width()
self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Preferred)
# To readjust the size automatically...
# ... when columns are added or resized
self.horizontalHeader().geometriesChanged \
.connect(self.updateGeometryAsync)
self.horizontalHeader().sectionResized \
.connect(self.updateGeometryAsync)
# ... when a row header label changes and makes the
# width of the vertical header change too
self.model().headerDataChanged.connect(self.updateGeometryAsync)
def updateGeometryAsync(self):
QTimer.singleShot(0, self.updateGeometry)
def sizeHint(self):
height = QTableWidget.sizeHint(self).height()
# length() includes the width of all its sections
width = self.horizontalHeader().length()
# you add the actual size of the vertical header and scrollbar
# (not the sizeHint which would only be the preferred size)
width += self.verticalHeader().width()
width += self.verticalScrollBar().width()
# and the margins which include the frameWidth and the extra
# margins that would be set via a stylesheet or something else
margins = self.contentsMargins()
width += margins.left() + margins.right()
return QSize(width, height)
場合は行ヘッダーの変更、全体の垂直ヘッダの幅が変化し、信号headerDataChanged
が放出された直後ではありません。
そのため、QTimer
を使用してupdateGeometry
(sizeHint
が変更されたときに呼び出される)を呼び出すのは、QTableWidget
が実際に垂直ヘッダーの幅を更新した後です。
関連する問題
- 1. 矢印を含むヘッダーのサイズを設定する
- 2. PyQtで設定ダイアログウィンドウを実装する
- 3. 異なるサイズのテキストを含む他の要素に同じサイズを設定する
- 4. テーマ設定ダイアログウィンドウがWPF
- 5. WCF最適なパフォーマンス設定
- 6. Googleシートの条件付き書式設定セル最後の列を含む、最後の行を含むセル
- 7. モジュールを含むFortranプロジェクト用の最適なマルチスレッドmakefileの検索
- 8. パフォーマンスを最適化するイメージを含む反応するネイティブコンポーネント
- 9. WPFのサイズ変更可能なダイアログウィンドウ
- 10. maxを含むSQLクエリを最適化する方法は?
- 11. 最適なSSISのデータフローの設定
- 12. 私のデータベースを設定するのに最適な方法/適切な方法
- 13. バックグラウンドスキャンの最適な設定 - Android/AltBeacon
- 14. インテル・アドバイザの最適なフラグと設定
- 15. セキュリティを強化するためのPHP.iniの最適な設定
- 16. VSの最適化設定
- 17. 設定し、それを含むdivの
- 18. はsettings.gradleの設定ファイルを含む
- 19. rspecヘルパーの設定config_forを含む
- 20. オーディオファイルキャッシュを設定するのに最適な技術
- 21. UITableViewCell - セルを設定するのに最適な場所
- 22. JVMガベージ・コレクタの適応サイズ設定
- 23. 1つのNALユニットのバイトを含む最大サイズ
- 24. ダイアログウィンドウを自動に設定して固定します。
- 25. Railsソートパラメータを設定する最適なソリューションは何ですか?
- 26. 動的コンテンツを含むテーブルビューを含むセルのサイズ変更
- 27. カルマ設定 - 他の設定ファイルを含む
- 28. 複数のサブクエリを含むこのクエリの最適化
- 29. Electron BrowserWindowの最大サイズと最小サイズの設定
- 30. Solr/Luceneで最適なベットや結果プロモーションを設定する
これは私にとってはうまく機能しましたが、「受け入れられた」回答は受けませんでした。 1つの理由は、私がTerry氏のソリューションで使用されていたcolumnCountメソッドを持たないQTableViewを使用している可能性があります。 QTableViewでは、モデルを使用してヘッダーが変更されたかどうかを判断するため、このソリューションを機能させるには、コンストラクターの初期段階でモデルを設定する必要があります。 –
警告:私はこの保存されたMyTableWidgetの実装を保存されていないダイアログ(例えば、ダイアログが作成されて同じメソッドでスコープ外に出てしまった)で使用していて、 'RuntimeError:wrapped C/C++オブジェクトMyTableWidgetタイプが削除されました.'というエラーが表示されます。ウィジェットが既にガベージコレクションされた後に 'QTimer'が' self.updateGeometry'を呼び出そうとしていたと思います(可能でしょうか?)。いずれにしても、私は 'self.updateGeometryAsync'の呼び出しを' self.updateGeometry'の呼び出しに置き換えました。それでも私にとってはうまくいきました。 – jeremiahbuddha