Извините за, вероятно, довольно простой вопрос, я очень новичок в PyQt5 и действительно изо всех сил пытаюсь понять, как это работает.
Я пытаюсь сделать грубое и готовое меню параметров для своей программы, и в рамках этого я хотел бы добавить несколько небольших текстовых полей для ввода данных пользователем. Я использовал систему компоновки сетки, чтобы упростить себе задачу, но кажется, что текстовые поля QLineEdit пытаются расширяться по горизонтали и сжимать все остальное.
Как выглядит мое окно без текстового поля
Как выглядит мое окно с текстовым полем
Я видел разговоры об использовании setHorizontalPolicy, но я не понимаю документацию (и попытка разобраться вручную не работает).
(В идеале я бы хотел, чтобы мое окно выглядело примерно так:
_______________________________________________
| [title | [title] |
| |[label] [text box] |
| |[label] [text box] |
| checkboxes |[label] [text box] |
| |[label] [text box] |
| | |
| | |
| | [some buttons] |
|_________________________|___________________|
)
Вот наиболее важные фрагменты моего кода, если это поможет.
class label_and_qle(QWidget):
def __init__(self, label):
super().__init__()
self.label = label
self.initUI()
def initUI(self):
grid = QGridLayout()
self.setLayout(grid)
qle = QLineEdit(self)
qle_label = set_labels()
qle.setFixedWidth(80)
qle_label.set_label_dynamic(self.label)
# qle.textChanged[str].connect(self.change_options)
grid.addWidget(qle_label, 0, 0, 1, 2)
grid.addWidget(qle, 0, 2, 1, 1)
class misc_options_gui(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
grid = QGridLayout()
self.setLayout(grid)
#Set the section title
lab_title = set_labels()
lab_title.set_label_title(data_options.misc_options_title)
grid.addWidget(lab_title, 0, 0)
error_tol = label_and_qle("Error tolerance", data_options.error_tolerance)
grid.addWidget(error_tol, 5, 0)
#Creat a button to set Folder destination
set_path = QPushButton('set folder', self)
set_path.clicked.connect(self.get_folder)
grid.addWidget(set_path, 12, 0)
#Create button to launch iMMPY program
run_button = QPushButton('Run iMMPY script', self)
run_button.clicked.connect(self.run_iMMPY)
grid.addWidget(run_button, 14, 0)
def run_iMMPY(self):
if data_options.path == []:
self.get_folder()
self.showMinimized()
run_iMMPY()
self.close()
def get_folder(self):
folder = QFileDialog.getExistingDirectory(parent = None, caption = "Select folder")
data_options.path = folder
class Example(QMainWindow):
'''
This object is the main window of the options menu
'''
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
'''
Initialise main window's UI
'''
#Create central widget
self.central_widget = QWidget()
self.setCentralWidget(self.central_widget)
#Define grid layout
self.grid = QGridLayout()
self.centralWidget().setLayout(self.grid)
checkboxes = checkboxes_gui(data_options.checkboxes_title, data_options.names_list, data_options.defaults_list)
misc_options = misc_options_gui()
self.grid.addWidget(checkboxes, 0, 0, 1, 3)
self.grid.addWidget(misc_options, 0, 3, 1, 1)
checkboxes.resize(500, 750)
misc_options.resize(250, 750)
#Set window properties
self.setGeometry(600, 200, 750, 750)
self.setWindowTitle('Options menu')
self.show()
Спасибо за любую помощь, которую вы можете дать