我有两个编辑行,当在其中键入字典中的字母时,它返回一个数字,这个数字被添加到下一个编辑行号中,并打印在标签上。现在,我希望在更改其中一个编辑行时减少以前的数字,并添加新的数字
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QLabel
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.uic import loadUiType
oroh, _ = loadUiType("oroh.ui")
class OrOh(QWidget, oroh):
def __init__(self):
QWidget.__init__(self)
self.setupUi(self)
self.lin_sh1.returnPressed.connect(self.shift1)
self.lin_sh2.returnPressed.connect(self.shift2)
def shift1(self):
shifts = {"m":7, "s":7, "v":7, "t":7, "e":3, "le":5, "ld":12,
"n":12, "ln":14, "mn":19, "en":17, "me":10, "f":24}
sh1 = self.lin_sh1.text()
if sh1 in shifts.keys():
a = shifts[sh1]
print(a)
else:
a = 0
print(a)
self.lbl_shifts.setText(f"{a}")
def shift2(self):
shifts = {"m":7, "s":7, "v":7, "t":7, "e":3, "le":5, "ld":12,
"n":12, "ln":14, "mn":19, "en":17, "me":10, "f":24}
a = self.lbl_shifts.text()
sh2 = self.lin_sh2.text()
if sh2 in shifts.keys():
b = shifts[sh2]
else:
b = 0
result = int(a) + int(b)
self.lbl_shifts.setText(f"{result}")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = OrOh()
window.show()
app.exec_()
由于键可以使用多个字符,因此一种可能的解决方案是使用^{} 信号,然后调用函数来计算移位
然而,事实上,这两个现有函数实际上是有缺陷的:它们几乎都做同样的事情,但不应该考虑这两个字段。p>我建议您合并这些函数,并仅在输入有效键时使用
textChanged
来“重置”值。请注意,这意味着一个逻辑不是立即就能理解的(即使对于用户来说),并且可能会引起一些混乱我建议您添加一些验证逻辑,或者至少始终使用
textChanged
信号。一个简单的解决方案是,只要输入的文本不在字典中,就更改文本颜色,并在焦点改变时最终清除它:另一种可能是使用可编辑的QComboBox(将insert policy设置为
NoInsert
),并且仅当插入的文本在列表中时才检查移位相关问题 更多 >
编程相关推荐