python - 设置相同的小部件实例不起作用
问题描述
我有一个 pyqt 应用程序,当在 gridlayout 上使用相同的 QLabel 类实例时,它不起作用。我看到只显示一个实例。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QToolTip, QPushButton, QMessageBox, QAction, qApp, QMenu, QTextEdit, QToolBar, QMdiArea, QGridLayout, QLabel, QDialog
from PyQt5.QtGui import QFont, QIcon, QPainter, QVector2D
from PyQt5.Qt import QDesktopWidget, QMainWindow, Qt, QHBoxLayout, QVBoxLayout,\
QLineEdit
from PyQt5.QtCore import QPoint
class Example(QDialog):
count = 0
def __init__(self, *args, **kwargs):
super(Example, self).__init__(*args, **kwargs)
self.initUI()
def initUI(self):
grid = QGridLayout()
a1 = QLabel('alphanumeric characters')
a2 = QLabel('alphanumeric characters')
grid.addWidget(QLabel('Name'), 1, 0)
grid.addWidget(QLineEdit(), 1, 1)
grid.addWidget(QLabel('only alphanumeric'), 1, 2)
grid.addWidget(QLabel('Street1'), 2, 0)
grid.addWidget(QLineEdit(), 2, 1)
grid.addWidget(QLabel('only alphanumeric'), 2, 2)
grid.addWidget(QLabel('Street2'), 3, 0)
grid.addWidget(QLineEdit(), 3, 1)
grid.addWidget(QLabel('only alphanumeric'), 3, 2)
grid.addWidget(QLabel('City'), 3, 0)
grid.addWidget(QLineEdit(), 3, 1)
grid.addWidget(QLabel('only alphanumeric'), 3, 2)
self.setLayout(grid)
self.setGeometry(500, 500, 500, 500)
self.setWindowTitle('Lines')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
# ex.show()
sys.exit(app.exec_())
解决方案
首先坐标从 (0, 0) 开始,所以我已经更正了这部分。
正题,不用一对一相加,addWidget()
方法重载了,所以有一个4和5的参数,分别表示行和列的跨度。
void addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = ...)
void addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan , int columnSpan , Qt::Alignment alignment = ...)
import sys
from PyQt5.QtWidgets import QApplication, QDialog, QGridLayout, QLabel, QLineEdit
class Example(QDialog):
def __init__(self, *args, **kwargs):
super(Example, self).__init__(*args, **kwargs)
self.initUI()
def initUI(self):
grid = QGridLayout(self)
a1 = QLabel('alphanumeric characters')
a2 = QLabel('alphanumeric characters')
grid.addWidget(QLabel('Name'), 0, 0)
grid.addWidget(QLineEdit(), 0, 1)
grid.addWidget(QLabel('Street1'), 1, 0)
grid.addWidget(QLineEdit(), 1, 1)
grid.addWidget(QLabel('Street2'), 2, 0)
grid.addWidget(QLineEdit(), 2, 1)
grid.addWidget(QLabel('City'), 3, 0)
grid.addWidget(QLineEdit(), 3, 1)
grid.addWidget(QLabel('only alphanumeric'), 0, 2, 4, 1)
self.setGeometry(500, 500, 500, 500)
self.setWindowTitle('Lines')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
# ex.show()
sys.exit(app.exec_())
推荐阅读
- memory-management - 多级页表
- react-native - 如何设置视图组件的样式以在两个按钮之间添加空间?
- node.js - API 调用 Node 后端后访问 header 属性
- java - 使用opencv抛出异常将字符串转换为pojo类
- c++ - S3/Minio 性能问题
- postgresql - #heroku 错误:列 c.relhasoids 不存在第 1 行:...rigers,c.relrowsecurity,c.relforcerowsecurity,c.relhasoi
- java - JAVA - 存储实现接口然后返回实例的类
- laravel - 下载 Laravel 安装程序时连接被拒绝 - “https://repo.packagist.org/packages.json”文件无法下载”
- c# - 将一个实体复制到另一个实体以进行缓存
- python - 列表理解“创建列表”和“附加元素”与简单循环有何不同?