【问题标题】:how to move QLineEdit and QPushButton to next line如何将 QLineEdit 和 QPushButton 移动到下一行
【发布时间】:2019-04-06 03:02:37
【问题描述】:

我的代码有问题,我无法将 entry2btn2 移动到 entry1btn1 并且在尝试时会导致我的代码混乱。 我使用 PyQt5 进行编程。如果您能指导我完成此过程,我将不胜感激..

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class Window(QtWidgets.QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        V = QtWidgets.QApplication.desktop().screenGeometry()
        h, w, x, y = V.height(), V.width(), 1000, 600
        self.setGeometry(h/4, w/20, x, y)
        self.setFixedSize(x, y)
        self.setWindowTitle('Main Window')
        centralWidget = QtWidgets.QWidget()
        self.setCentralWidget(centralWidget)
        self.grid = QtWidgets.QGridLayout(centralWidget)
        OpenFile = QtWidgets.QAction('Open', self)
        OpenFile.setShortcut('Ctrl+O')
        OpenFile.setStatusTip('Open Restore File...')
        self.statusBar()
        mainMenu = self.menuBar()
        fileMenu = mainMenu.addMenu('File')
        fileMenu.addAction(OpenFile)
        self.home()

    def home(self):
        self.tools_in_home()
        self.show()

    def tools_in_home(self):
        self.groupBox0 = QtWidgets.QGroupBox('Test 1') 
        self.groupBox0.setFixedSize(400, 200)
        hBoxLayout1 = QtWidgets.QHBoxLayout()
        entry1 = QtWidgets.QLineEdit('Enter Value1...')
        entry2 = QtWidgets.QLineEdit('Enter Valu2...')
        hBoxLayout1.addWidget(entry1)
        hBoxLayout1.addWidget(entry2)
        btn1 = QtWidgets.QPushButton('Submit1', self)
        btn2 = QtWidgets.QPushButton('Submit2', self)
        hBoxLayout1.addWidget(btn1)
        hBoxLayout1.addWidget(btn2)
        self.groupBox0.setLayout(hBoxLayout1)
        self.groupBox1 = QtWidgets.QGroupBox('Test 2')
        self.groupBox1.setFixedSize(400, 200)
        self.groupBox2 = QtWidgets.QGroupBox('Test 3')
        self.groupBox2.setFixedSize(400, 200)
        self.groupBox3 = QtWidgets.QGroupBox('Test 4')
        self.groupBox3.setFixedSize(400, 200)
        self.grid.addWidget(self.groupBox0, 0, 0)
        self.grid.addWidget(self.groupBox1, 2, 0)
        self.grid.addWidget(self.groupBox2, 0, 2)
        self.grid.addWidget(self.groupBox3, 2, 2)

def run():
    app = QtWidgets.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())

if __name__ == '__main__':
    run()

【问题讨论】:

    标签: python python-3.x pyqt pyqt5


    【解决方案1】:

    当你使用addWidget()时,必须按顺序进行,即先entry1,然后btn1,然后entry2,最后btn2。

    def tools_in_home(self):
        self.groupBox0 = QtWidgets.QGroupBox('Test 1') 
        self.groupBox0.setFixedSize(400, 200)
    
        hBoxLayout1 = QtWidgets.QHBoxLayout()
        entry1 = QtWidgets.QLineEdit('Enter Value1...')
        entry2 = QtWidgets.QLineEdit('Enter Valu2...')
        btn1 = QtWidgets.QPushButton('Submit1')
        btn2 = QtWidgets.QPushButton('Submit2')
        hBoxLayout1.addWidget(entry1)
        hBoxLayout1.addWidget(btn1)
        hBoxLayout1.addWidget(entry2)
        hBoxLayout1.addWidget(btn2)
        self.groupBox0.setLayout(hBoxLayout1)
    
        # ...
    

    更新:

    如果你想要一个表单的结构,那么使用 QFormLayout。

    def tools_in_home(self):
        self.groupBox0 = QtWidgets.QGroupBox('Test 1') 
        self.groupBox0.setFixedSize(400, 200)
        lay = QtWidgets.QFormLayout()
        entry1 = QtWidgets.QLineEdit('Enter Value1...')
        entry2 = QtWidgets.QLineEdit('Enter Valu2...')
        btn1 = QtWidgets.QPushButton('Submit1')
        btn2 = QtWidgets.QPushButton('Submit2')
        lay.addRow(entry1, btn1)
        lay.addRow(entry2, btn2)
        self.groupBox0.setLayout(lay)
    
        # ...
    

    或QGridLayout:

    def tools_in_home(self):
        self.groupBox0 = QtWidgets.QGroupBox('Test 1') 
        self.groupBox0.setFixedSize(400, 200)
        lay = QtWidgets.QGridLayout()
        entry1 = QtWidgets.QLineEdit('Enter Value1...')
        entry2 = QtWidgets.QLineEdit('Enter Valu2...')
        btn1 = QtWidgets.QPushButton('Submit1')
        btn2 = QtWidgets.QPushButton('Submit2')
        lay.addWidget(entry1, 0, 0)
        lay.addWidget(btn1, 0, 1)
        lay.addWidget(entry2, 1, 0)
        lay.addWidget(btn2, 1, 1)
        self.groupBox0.setLayout(lay)
    

    【讨论】:

    • 谢谢,但我想将 entry2btn2 移到 entry1btn1
    • @Nima 查看我的更新 :-),如果我的回答对您有帮助,请不要忘记将其标记为正确,如果您不知道该怎么做,请查看 tour,即最好的感谢方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2020-03-31
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多