2017-06-27 1 views
0

DirectoryEditWidgetウィジェット、つまりQLineEditウィジェットと似たウィジェットを作成しようとしていますが、ユーザがディレクトリのファイルシステムを閲覧できるようにするためのブラウズボタンがあります。 機能は以下の実装で動作していますが、私はQFormLayoutに入って、それ以外のものとうまく対応する解決策が欲しいと思います。私は疑うQt:QTextFieldのように整列するカスタムウィジェットを作成するには

enter image description here

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()) 
+0

すべてのウィジェットは、それぞれの側でカスタマイズ可能なコンテンツのマージンを持っています。上、下、左、右。デフォルトでは小さな値を持っています。そのため、FileEditWidgetのすべての面にわずかなインデントが表示されます。 FileEditWidgetのsetContentsMargins(leftMargin、topMargin、rightMargin、bottomMargin)のpython equivilentを呼び出して、必要な値に置き換えます(左右の余白は0にしてください)。また、すべてのQtレイアウトはまったく同じコンセプトを持っていますが、デフォルトでは余白が設定されているとは思われません。 – aatwo

+0

私の間違いは、デフォルトのマージンを持つレイアウトであり、ウィジェットではありません:)以下の答えはそれをうまく指摘しています。 – aatwo

答えて

2

問題は、レイアウトの余白によって引き起こされます。 documentationによると

:デフォルトでは

、QLayoutはスタイルによって提供された値を使用しています。ほとんどの プラットフォームでは、余白は全方向に11ピクセルです。以下の画像で

私はこれらのマージンを示しています。FileEditWidgetでこれを使用し、それらを削除するには

enter image description here

を。

class FileEditWidget(QtWidgets.QWidget): 
    def __init__(self, parent=None): 
     [...] 
     layout = QtWidgets.QHBoxLayout() 
     layout.setContentsMargins(0, 0, 0, 0) 

enter image description here

関連する問題