首页 > 解决方案 > 如何从 PyQt5 中的多个文本框中获取信息,并将它们存储到各自的类中

问题描述

我需要访问每个单独类的文本框中的信息)所以我可以使用每个类中的变量进行计算我知道如何在没有 GUI 的情况下进行计算,但使用像 PyQt5 这样的 GUI

>>> a = 'ABC, DEF, GHIJ'
>>> a.split(',')
['ABC', ' DEF', ' GHIJ']
>>> a = a.split(',')
>>> c = '7.00, 8.00, 9.00'
>>> c = c.split(',')
>>> e = '7.20, 8.20, 9.20'
>>> e = e.split(',')


h = {}

class Profile:
    def __init__(self, *args):
        self.one = h['info1']
        self.two = h['info2']
        self.three = h['info3']


>>> e = []
>>> for i in range(len(a)): # Takes splitted info above, combines it, and adds it to a dictionary(Ex: h['info1'] = ABC, h['info2'] = 7.00, h['info'] = 7.20)
    h['info1'] = a[i]
    h['info2'] = c[i]
    h['info3'] = e[i]
    e.append(Profile(h['info1'], h['info2'], h['info3'])) # Adds each combined list index to its own individual class

标签: pythonpython-3.xclasspyqtpyqt5

解决方案


您基本上会将某些小部件的信号连接QPushButton.clicked到与原始代码执行相同操作的函数。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Profile:

    def __init__(self, h):
        self.one = h['info1']
        self.two = h['info2']
        self.three = h['info3']


class Template(QWidget):

    def __init__(self):
        super().__init__()
        self.text_boxes = [QLineEdit() for i in range(3)]
        form = QFormLayout(self)
        for i, v in enumerate(self.text_boxes):
            form.addRow(f'Box {i}', v)
        btn = QPushButton('Enter')
        btn.clicked.connect(self.get_values)
        form.addRow(btn)

    def get_values(self):
        a, c, e = [x.text().split(',') for x in self.text_boxes]
        h = {}
        profiles = []
        for i in range(len(a)):
            h['info1'] = a[i]
            h['info2'] = c[i]
            h['info3'] = e[i]
            profiles.append(Profile(h))

        print('Profiles saved', profiles)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    gui = Template()
    gui.show()
    sys.exit(app.exec_())

推荐阅读