在读字典从生成的for循环QLineEdit的文本框中的文本更新

问题描述 投票:2回答:1

我一直在使用一个for循环,从字典拉动名和初始文本值产生2个QLineEdit的盒子。我的代码更新字典值就好并正确生成编辑框。什么我有在GUI用户看到的是实际更新的价值观问题。我使用pyside2和Windows蟒蛇3.7.2 10亲。

如果我“硬编码”的QLineEdit的盒子它的工作原理是利用self.display1.setText("asdf")预期。我生成的输入方法,我无法弄清楚如何做到这一点除了更新分配到编辑框的文本的字典值。我试着在点击按钮的时候调用update()repaint()并在字典中的值后进行修改。我也试着通过调用重拍的投入,做.addWidget()功能重新定义窗口小部件。这符合市场预期,产生下面已经生成的编辑框新的。然而,盒中的文字是正确的。

这是生成的输入的循环

for val, key in self.inputDict.items():
    self.inputs = QLineEdit(key, self)
    self.inputs.setText(key)
    self.vertCol.addWidget(self.inputs)

相关字典:self.inputDict = {"display1": "", "display2": ""}

这是生成的按钮循环(这是在一个循环中,因为这是仅有1这个程序我建立的功能,其它按钮滚不同面的骰子)

for key, val in self.buttonDict.items():
    self.buttons = QPushButton(key, self)
    self.buttons.setToolTip("D20 die rolled: 1-10=low, 11-20=high; Coin Flip: 0=Heads(Good) 1=Tails(Bad)")
    self.buttons.clicked.connect(partial(self.handlehlgb))
    self.vertCol.addWidget(self.buttons)

相关按钮字典self.buttonDict = {"High-Low-Good-Bad": "hlgb"}

而这正是我试图去工作中的作用:

    def handlehlgb(self):
        self.coinFlip = randrange(2)
        self.rollD20 = randint(1, 20)
        if self.coinFlip <= 0:
            self.inputDict.update({'display1': 'Good'})
            print(self.inputDict["display1"])
        else:
            self.inputDict.update({'display2': 'Bad'})
            print(self.inputDict["display2"])
        if self.rollD20 <= 10:
            self.inputDict.update({'display2': 'Low'})
            print(self.inputDict["display2"])
        else:
            self.inputDict.update({'display2': 'High'})
            print(self.inputDict["display2"])

这意味着要展示好/坏决心掀起了“掷硬币”和高/低基于掀起了D20模辊。

我期待它更新的GUI上显示,但事实并非如此。这将打印在控制台中显示的正确值。下面是我的工作的引擎收录:https://pastebin.com/H6LAnbnH

我与蟒蛇,特别是与pyside / PyQt的比较新的。因此,任何帮助将不胜感激!

python-3.x pyqt5 pyside2
1个回答
1
投票

我可能有误会,但似乎如果你只是掷骰子后添加的setText:

self.inputDict.update({'display1': 'Good'})
self.inputs.setText(self.inputDict["display2"])

文本在QLineEdit的更新。

然后,你可能想使self.inputs一本字典,所以你可以改变这两个QLineEdits:

self.inputs = {}
for val, key in self.inputDict.items():
    self.inputs[key] = QLineEdit(key, self)

...

self.inputDict.update({'display1': 'Good'})
self.inputs['display1'].setText(self.inputDict['display1'])

(等待......现在,我复制粘贴你的代码,我看到你写的val,key in ...,当你可能希望它是key,val in ...)。难道仅仅是?

[编辑]以下是它所用双方的想法变为:

class MainWidget(QWidget):
    def __init__(self):
        super(MainWidget, self).__init__()
        self.buttonDict = {"High-Low-Good-Bad": "hlgb"}
        self.inputDict = {"display1": "", "display2": ""}
        self.vertCol = QVBoxLayout(self)

        self.inputs = {}
        for key, val in self.inputDict.items():
            self.inputs[key] = QLineEdit(key, self)
            self.inputs[key].setText(val)
            print("Key - " + key)
            print("Val - " + val)
            self.vertCol.addWidget(self.inputs[key])

        for key, val in self.buttonDict.items():
            self.buttons = QPushButton(key, self)
            self.buttons.setToolTip("D20 die rolled: 1-10=low, 11-20=high; Coin Flip: 0=Heads(Good) 1=Tails(Bad)")
            self.buttons.clicked.connect(partial(self.handlehlgb))
            #self.buttons.clicked.connect(self.inputs.update())
            self.vertCol.addWidget(self.buttons)

    def handlehlgb(self):
        self.coinFlip = randrange(2)
        self.rollD20 = randint(1, 20)
        if self.coinFlip <= 0:
            self.inputDict.update({'display1': 'Good'})
            self.inputs['display1'].setText('Good')
            print(self.inputDict["display1"])
        else:
            self.inputDict.update({'display2': 'Bad'})
            self.inputs['display1'].setText('Bad')
            print(self.inputDict["display2"])
        if self.rollD20 <= 10:
            self.inputDict.update({'display2': 'Low'})
            self.inputs['display2'].setText('Low')
            print(self.inputDict["display2"])
        else:
            self.inputDict.update({'display2': 'High'})
            self.inputs['display2'].setText('High')
            print(self.inputDict["display2"])

© www.soinside.com 2019 - 2024. All rights reserved.