Hwo用多行多列实现QFormLayout

2024-04-26 06:56:38 发布

您现在位置:Python中文网/ 问答频道 /正文

如何实现具有多个行和列的from? 我目前正在使用QFormLayout,其中每一行都是QLabel和QLineEdit,如中所示

#!/usr/bin/python3

from PyQt5.QtWidgets import (QApplication, QWidget, QFormLayout, QLabel,
        QLineEdit)

import sys

app = QApplication([])
win = QWidget()
layout = QFormLayout()
layout.addRow('Name:', QLineEdit())
layout.addRow('Phone:', QLineEdit())
win.setLayout(layout)
win.setGeometry(50,50,400,200)
win.show()
app.exec_()

使

enter image description here

所以,如果我想有一个多行多列的表单,我需要做类似的事情吗

#!/usr/bin/python3

from PyQt5.QtWidgets import (QApplication, QWidget, QFormLayout, QLabel,
        QLineEdit, QGridLayout)

import sys

app = QApplication([])
win = QWidget()
layout = QGridLayout()
nameLabel = QLabel('Name:');    layout.addWidget(nameLabel, 0, 0)
nameInput = QLineEdit();        layout.addWidget(nameInput, 0, 1)
phoneLabel = QLabel('Phone:');  layout.addWidget(phoneLabel, 1, 0)
phoneInput = QLineEdit();       layout.addWidget(phoneInput, 1, 1)
addrLabel = QLabel('Address:'); layout.addWidget(addrLabel, 0, 2)
addrInput = QLineEdit();        layout.addWidget(addrInput, 0, 3)
zipLabel = QLabel('Zip:');      layout.addWidget(zipLabel, 1, 2)
zipInput = QLineEdit();         layout.addWidget(zipInput, 1, 3)
win.setLayout(layout)
win.setGeometry(50,50,400,200)
win.show()
app.exec_()

使

enter image description here

这是唯一的方法…这是不可扩展的。你知道吗

请原谅术语屠宰…我可以有一个QGrid类型的对象,它包含两个QForm对象,水平对齐吗? 我想这意味着

  • 创建QHBoxLayout
  • 将QGrid添加到此布局
  • 你知道吗网格.单元格(0,0)将是QForm_a
  • 你知道吗网格.单元格(0,1)将是qfu b形式

Tags: fromimportappbinusrwinpyqt5python3
2条回答

您可以尝试使用Qtable小部件:

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QAction, QTableWidget, QTableWidgetItem, QVBoxLayout
# from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot


class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'TABLE WIDGET'
        self.left = 0
        self.top = 0
        self.width = 300
        self.height = 200
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.createTable()

        # Add box layout, add table to box layout and add box layout to widget
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableWidget)
        self.setLayout(self.layout)

        # Show widget
        self.show()

    def createTable(self):
        # Create table
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(4)
        self.tableWidget.setColumnCount(2)
        self.tableWidget.setItem(0, 0, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(0, 1, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(1, 0, QTableWidgetItem("Cell (2,1)"))
        self.tableWidget.setItem(1, 1, QTableWidgetItem("Cell (2,2)"))
        self.tableWidget.setItem(2, 0, QTableWidgetItem("Cell (3,1)"))
        self.tableWidget.setItem(2, 1, QTableWidgetItem("Cell (3,2)"))
        self.tableWidget.setItem(3, 0, QTableWidgetItem("Cell (4,1)"))
        self.tableWidget.setItem(3, 1, QTableWidgetItem("Cell (4,2)"))
        self.tableWidget.move(0, 0)

        # table selection change
        self.tableWidget.doubleClicked.connect(self.on_click)

    @pyqtSlot()
    def on_click(self):
        print("\n")
        for currentQTableWidgetItem in self.tableWidget.selectedItems():
            print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

谢谢你的反馈,我这样解决了我的问题。你知道吗

  • 创建QGroupBox
  • 创建QGridLayout
  • 在单元格(0,0)处放置一个标签,在单元格(0,1)处放置一个lineedit,然后在c(0,2)和c(0,3)处放置类似的标签。将此视为第0行
  • 然后重复你想要的行数

我想知道QTable不允许任何小部件插入给定行列位置(包括QTable)的技术原因是什么。你知道吗

相关问题 更多 >