Có cách nào nhỏ nhặt hoặc thanh lịch để phân biệt giữa nhiều nguồn tín hiệu cùng loại trong PySide/PyQt?Phân biệt giữa các nguồn tín hiệu trong PySide
Tôi đang học PySide. Tôi đã viết ứng dụng đơn giản, nhân hai số từ hai đối tượng QLineEdit() khác nhau. Kết quả được hiển thị trong QLineEdit thứ ba.
Tín hiệu Multiplier và multiplicand QLineEdit.textChanged() được kết nối với một phương thức (TxtChanged). Trong phương pháp này tôi phải phân biệt giữa các nguồn tín hiệu. Sau một số thử nghiệm tôi đã tìm ra một số cách giải quyết dựa trên văn bản giữ chỗ (4 dòng bên dưới "là có cách khác?" Bình luận trong mã của tôi)
mã:
import sys
from PySide import QtGui, QtCore
class myGUI(QtGui.QWidget):
def __init__(self, *args, **kwargs):
QtGui.QWidget.__init__(self, *args, **kwargs)
self.multiplier = 0
self.multiplicand = 0
self.myGUIInit()
def myGUIInit(self):
# input forms
a1_label = QtGui.QLabel("a1")
a1_edit = QtGui.QLineEdit()
a1_edit.setPlaceholderText("a1")
a2_label = QtGui.QLabel("a2")
a2_edit = QtGui.QLineEdit()
a2_edit.setPlaceholderText("a2")
# output form
a1a2_label = QtGui.QLabel("a1*a2")
self.a1a2_edit = QtGui.QLineEdit()
self.a1a2_edit.setReadOnly(True)
# forms events
a1_edit.textChanged.connect(self.TxtChanged)
a2_edit.textChanged.connect(self.TxtChanged)
# grid
grid = QtGui.QGridLayout()
grid.setSpacing(10)
grid.addWidget(a1_label,1,0)
grid.addWidget(a1_edit,1,1)
grid.addWidget(a2_label,2,0)
grid.addWidget(a2_edit,2,1)
grid.addWidget(a1a2_label,3,0)
grid.addWidget(self.a1a2_edit,3,1)
self.setLayout(grid)
self.setGeometry(100,100,200,200)
self.setWindowTitle("a*b")
self.show()
def TxtChanged(self,text):
sender = self.sender()
sender_text = sender.text()
if sender_text == '': sender_text = '0'
# is there another way?
if sender.placeholderText() == 'a1':
self.multiplicand = sender_text
else:
self.multiplier = sender_text
product = int(self.multiplier) * int(self.multiplicand)
print(self.multiplier,self.multiplicand,product)
self.a1a2_edit.setText(str(product))
def main():
app = QtGui.QApplication(sys.argv)
mainWindow = myGUI()
sys.exit(app.exec_())
main()
tốt nhất liên quan, ostrzysz
Cảm ơn mọi người vì câu trả lời. Trân trọng! – ostrzysz