DirectoryEditWidget
ウィジェット、つまりQLineEdit
ウィジェットと似たウィジェットを作成しようとしていますが、ユーザがディレクトリのファイルシステムを閲覧できるようにするためのブラウズボタンがあります。 機能は以下の実装で動作していますが、私はQFormLayout
に入って、それ以外のものとうまく対応する解決策が欲しいと思います。私は疑うQt:QTextFieldのように整列するカスタムウィジェットを作成するには
class FileEditWidget(QtWidgets.QWidget):
"""
A textfield with a browse button.
"""
def __init__(self, parent=None):
super().__init__(parent)
layout = QtWidgets.QHBoxLayout()
self.file_line_edit = QtWidgets.QLineEdit()
layout.addWidget(self.file_line_edit, stretch=1)
browse_button = QtWidgets.QPushButton("...")
layout.addWidget(browse_button)
self.setLayout(layout)
browse_button.clicked.connect(self.browse)
def browse(self, msg = None, start_path = None):
directory = QtWidgets.QFileDialog.getExistingDirectory(self,
msg or "Find files", start_path or QtCore.QDir.currentPath())
if directory:
self.file_line_edit.setText(directory)
、私は親QWidget
オブジェクトまたはレイアウトのレイアウトプロパティを変更する必要があります - しかし、私はどこから始めればアイデアの多くを持っていないのですか?下のスクリーンショットで
ので、同じように、私は私のカスタムのウィジェットが含まれている:
def create_form_group(self):
form_group_box = QtWidgets.QGroupBox("Central widget with form layout")
layout = QtWidgets.QFormLayout()
layout.addRow(QLabel("Name of stuff"), QtWidgets.QLineEdit())
layout.addRow(QLabel("Folder name"), FileEditWidget())
layout.addRow(QLabel("Some selection"), QtWidgets.QComboBox())
すべてのウィジェットは、それぞれの側でカスタマイズ可能なコンテンツのマージンを持っています。上、下、左、右。デフォルトでは小さな値を持っています。そのため、FileEditWidgetのすべての面にわずかなインデントが表示されます。 FileEditWidgetのsetContentsMargins(leftMargin、topMargin、rightMargin、bottomMargin)のpython equivilentを呼び出して、必要な値に置き換えます(左右の余白は0にしてください)。また、すべてのQtレイアウトはまったく同じコンセプトを持っていますが、デフォルトでは余白が設定されているとは思われません。 – aatwo
私の間違いは、デフォルトのマージンを持つレイアウトであり、ウィジェットではありません:)以下の答えはそれをうまく指摘しています。 – aatwo