Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用循环设置多个QLineEdit的属性_Python_Python 3.x_Pyqt_Pyqt5_Qlineedit - Fatal编程技术网

Python 使用循环设置多个QLineEdit的属性

Python 使用循环设置多个QLineEdit的属性,python,python-3.x,pyqt,pyqt5,qlineedit,Python,Python 3.x,Pyqt,Pyqt5,Qlineedit,我想知道是否可以使用for循环设置多个setFixedHeight()属性: for num in range(1, 6): self.LineEdit[num].setFixedHeight() 目前,我有12个Qline编辑框 LineEdit1,LineEdit2,LineEdit12,我希望用更少的代码来实现这一点。我尝试了上述方法,但它并没有像我预期的那样遍历LineEdit框。self.LineEdit[num]是否仅适用于列表?您可以使用findChildren()函数

我想知道是否可以使用for循环设置多个
setFixedHeight()
属性:

for num in range(1, 6):
    self.LineEdit[num].setFixedHeight()
目前,我有12个Qline编辑框


LineEdit1,LineEdit2,LineEdit12,我希望用更少的代码来实现这一点。我尝试了上述方法,但它并没有像我预期的那样遍历LineEdit框。
self.LineEdit[num]
是否仅适用于列表?

您可以使用
findChildren()
函数

e、 g

请注意,这将对所有行编辑调用
setFixedHeight()

对于此任务,您可以使用:

和,和


我还发现了一种不同的方法,即使用
getattr
创建一个列表,并遍历该列表,但您的方法要干净得多。谢谢。我想对应用
setFixedHeight()
属性的行编辑范围有更多的控制。这样设置在将来可能会很有用,因为我不需要太多的控制,我会记住这一点。
for ctl in self.findChildren(QtGui.QLineEdit):
    ctl.setFixedHeight()
for i in range(1,13):
    getattr(self, "LineEdit{}".format(i)).setFixedHeight(10)
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
http://code.activestate.com/recipes/131499-observer-pattern/
*TL;DR80
Maintains a list of dependents and notifies them of any state changes.
*Examples in Python ecosystem:
Django Signals: https://docs.djangoproject.com/en/2.1/topics/signals/
Flask Signals: http://flask.pocoo.org/docs/1.0/signals/
"""

from __future__ import print_function
import sys
from PyQt5.QtWidgets import (QLineEdit, QApplication, QWidget, QVBoxLayout)
import random
import asyncio


class Subject(object):
    def __init__(self):
        self._observers = []

    def attach(self, observer):
        if observer not in self._observers:
            self._observers.append(observer)

    def detach(self, observer):
        try:
            self._observers.remove(observer)
        except ValueError:
            pass

    def notify(self, modifier=None):
        for observer in self._observers:
            if modifier != observer:
                observer.update(self)


# Example usage
class Data(Subject):
    def __init__(self, name=''):
        Subject.__init__(self)
        self.name = name
        self._data = 0
        self.default = 0

    @property
    def data(self):
        return self._data

    @data.setter
    def data(self, value):
        self._data = value
        self.notify()


class ObservableViewer:
    _line_edit = None

    def __init__(self, line_edit):
        self.line_edit = line_edit

    @property
    def line_edit(self):
        return self._line_edit

    @line_edit.setter
    def line_edit(self, value):
        self._line_edit = value

    def update(self, subject):
        asyncio.get_event_loop().call_soon_threadsafe(self.line_edit.setText, subject.data)


class Widget(QWidget):
    layout = None

    def __init__(self, parent=None):
        super(QWidget, self).__init__(parent)
        self.x = ['abc', 'def', 'ghi', 'jkl', 'etc']
        self.dx = []
        self._init_component()
        asyncio.run_coroutine_threadsafe(self.update_async(), loop=asyncio.get_event_loop())

    def _init_component(self):
        self.layout = QVBoxLayout()
        self.setLayout(self.layout)
        for xi in self.x:
            lei = QLineEdit()
            lei.setAccessibleName(f"__{xi}")
            lei.setText(xi)
            di = Data(str(xi))
            self.dx.append(di)
            ovi = ObservableViewer(line_edit=lei)
            di.attach(ovi)
            di.data = xi
            di.default = xi
            self.layout.addWidget(lei)

    @asyncio.coroutine
    async def update_async(self):
        while True:
            for di in self.dx:
                di.data = f"{di.default}-{random.randrange(0, 101, 2)}"
            await asyncio.sleep(1, loop=asyncio.get_event_loop())


if __name__ == "__main__":
    from quamash import (QEventLoop)

    app = QApplication(sys.argv)
    loop = QEventLoop(app)
    asyncio.set_event_loop(loop)
    w = Widget()
    w.show()
    sys.exit(app.exec_())