python - 如何在不创建填充按钮的情况下填充 QHBoxLayout 以对齐多个 QGroupBox?
问题描述
我得到了这个布局:
但我希望第一个文本框与第二个文本框对齐,如下所示:
但不必创建一个无用的按钮来填充空间。
这是我想出的最小示例代码:
import sys
from PyQt5 import QtGui
from PyQt5 import QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
def main():
app = QtWidgets.QApplication(sys.argv)
programWindow = ProgramWindow()
programWindow.show()
sys.exit(app.exec_())
class ProgramWindow(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.setup_main_window()
self.first_input_text()
self.second_input_text()
self.set_window_layout()
def setup_main_window(self):
self.resize( 800, 600 )
self.centralwidget = QWidget()
self.setCentralWidget( self.centralwidget )
def first_input_text(self):
self.textEditWidget1 = QPlainTextEdit( self )
self.startSimulationButton1 = QPushButton( "Start Simulation" )
self.startSimulationButtonDumb = QPushButton( "Start Simulation fillingg" )
verticalInnerLayout = QVBoxLayout()
verticalInnerLayout.addWidget( self.startSimulationButton1 )
verticalInnerLayout.addWidget( self.startSimulationButtonDumb )
horizontalInnerLayout = QHBoxLayout()
horizontalInnerLayout.addLayout( verticalInnerLayout )
horizontalInnerLayout.addWidget( self.textEditWidget1 )
self.groupBox1 = QGroupBox( "First Group" )
self.groupBox1.setLayout( horizontalInnerLayout )
def second_input_text(self):
self.textEditWidget2 = QPlainTextEdit( self )
self.startSimulationButton2 = QPushButton( "Start Simulation bigger" )
verticalInnerLayout = QVBoxLayout()
verticalInnerLayout.addWidget( self.startSimulationButton2 )
horizontalInnerLayout = QHBoxLayout()
horizontalInnerLayout.addLayout( verticalInnerLayout )
horizontalInnerLayout.addWidget( self.textEditWidget2 )
self.groupBox2 = QGroupBox( "Second Group" )
self.groupBox2.setLayout( horizontalInnerLayout )
def set_window_layout(self):
main_vertical_layout = QVBoxLayout( self.centralwidget )
main_vertical_layout.addWidget( self.groupBox1 )
main_vertical_layout.addWidget( self.groupBox2 )
if __name__ == "__main__":
main()
解决方案
QWidget.setMinimumWidth(minw) 此属性保存小部件的最小宽度(以像素为单位)。
试试看:
import sys
from PyQt5 import QtGui
from PyQt5 import QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
def main():
app = QtWidgets.QApplication(sys.argv)
programWindow = ProgramWindow()
programWindow.show()
sys.exit(app.exec_())
class ProgramWindow(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.setup_main_window()
self.first_input_text()
self.second_input_text()
self.set_window_layout()
def setup_main_window(self):
self.resize( 800, 600 )
self.centralwidget = QWidget()
self.setCentralWidget( self.centralwidget )
def first_input_text(self):
self.textEditWidget1 = QPlainTextEdit( self )
self.startSimulationButton1 = QPushButton( "Start Simulation" )
self.startSimulationButton1.setMinimumWidth(150) #+
#self.startSimulationButtonDumb = QPushButton( "Start Simulation fillingg" )
verticalInnerLayout = QVBoxLayout()
verticalInnerLayout.addWidget( self.startSimulationButton1 )
#verticalInnerLayout.addWidget( self.startSimulationButtonDumb )
horizontalInnerLayout = QHBoxLayout()
horizontalInnerLayout.addLayout( verticalInnerLayout )
horizontalInnerLayout.addWidget( self.textEditWidget1 )
self.groupBox1 = QGroupBox( "First Group" )
self.groupBox1.setLayout( horizontalInnerLayout )
def second_input_text(self):
self.textEditWidget2 = QPlainTextEdit( self )
self.startSimulationButton2 = QPushButton( "Start Simulation bigger" )
self.startSimulationButton2.setMinimumWidth(150) # +
verticalInnerLayout = QVBoxLayout()
verticalInnerLayout.addWidget( self.startSimulationButton2 )
horizontalInnerLayout = QHBoxLayout()
horizontalInnerLayout.addLayout( verticalInnerLayout )
horizontalInnerLayout.addWidget( self.textEditWidget2 )
self.groupBox2 = QGroupBox( "Second Group" )
self.groupBox2.setLayout( horizontalInnerLayout )
def set_window_layout(self):
main_vertical_layout = QVBoxLayout( self.centralwidget )
main_vertical_layout.addWidget( self.groupBox1 )
main_vertical_layout.addWidget( self.groupBox2 )
if __name__ == "__main__":
main()
推荐阅读
- html - 通知后 Md 对话框关闭
- python - 在 Openpyxl 中查找重复行的索引
- drupal-8 - 表单未在自定义模块内的自定义模板中呈现
- postgresql - 如何在 Yii2 中以整数作为第二个参数编写 where 查询
- python - 如何通过拆分现有的 pandas 列来创建新的列
- android - 如何防止 ProgressBar 卡住?
- angular - 指令“TrimInputDirective”的选择器应具有前缀之一 - Angular Directive Linting Issue
- chef-infra - 如何将带有双斜杠的属性值传递给模板
- sql-server - SQL 备份另存为 .ZIP,但在还原后发现损坏
- mysql - mysql.server start 不会启动 mysql 服务器