1 回答

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
問題可能是線路self.tbox1.setFocus()導(dǎo)致focusChanged信號(hào)再次發(fā)射。QListWidget 被清除并重新進(jìn)貨,因此沒有當(dāng)前項(xiàng)目文本,文本框設(shè)置為空字符串,給人一種“無響應(yīng)”的感覺。無論如何,我在嘗試運(yùn)行代碼時(shí)遇到了分段錯(cuò)誤,所以我不得不更改它。
所有的信號(hào)和槽連接都可以在主類中完成。從 QListWidget 中選擇一個(gè)項(xiàng)目可以用currentTextChanged信號(hào)檢測(cè)。在 focusChanged 上,保持指向最新聚焦的 QLineEdit 的指針?,F(xiàn)在,當(dāng)從列表小部件中選擇一個(gè)項(xiàng)目時(shí),您可以將文本設(shè)置為正確的文本框并重新對(duì)其應(yīng)用焦點(diǎn)。
import sys
from PyQt5.QtWidgets import *
textbox_items = {
"textbox1": ["Red", "Green", "Blue", "Brown", "White", "Black", "Grey",
"Dark Red", "Dark Green", "Dark Blue"],
"textbox2": ["Gold", "Silver", "Bronze", "Copper", "Iron", "Aluminium",
"Taitanium"],
"textbox3": ["Indian Ocean", "Arabian Sea", "Bay of Bengal", "Black Sea",
"Pacific Ocean"]
}
class Mclick_sample_main(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Mouse click Samples")
self.textbox1 = QLineEdit()
self.textbox2 = QLineEdit()
self.textbox3 = QLineEdit()
self.listbox1 = QListWidget()
self.listbox1.currentTextChanged[str].connect(self.update_textbox)
self.textbox1.setObjectName("textbox1")
self.textbox2.setObjectName("textbox2")
self.textbox3.setObjectName("textbox3")
self.listbox1.setObjectName("listbox1")
vbox = QVBoxLayout(self)
vbox.addWidget(self.textbox1)
vbox.addWidget(self.textbox2)
vbox.addWidget(self.textbox3)
vbox.addWidget(self.listbox1)
self.current_textbox = None
QApplication.instance().focusChanged.connect(self.on_focusChanged)
def on_focusChanged(self, old, new):
if isinstance(new, QLineEdit) and new != self.current_textbox:
self.current_textbox = new
self.listbox1.clear()
self.listbox1.addItems(textbox_items[new.objectName()])
def update_textbox(self, text):
if text:
self.current_textbox.setText(text)
self.current_textbox.setFocus()
def main():
myapp = QApplication(sys.argv)
mywin = Mclick_sample_main()
mywin.show()
sys.exit(myapp.exec_())
if __name__ == "__main__":
main()
添加回答
舉報(bào)