选择项目并通过鼠标单击从 QlistWidget 更新 QLineedit?

通过从 QlistWidget 中选择的项目更新 QLineEdit,根据我的意愿更新第一个框。但是第二个文本框和第三个文本框,没有被所选项目更新。如果我们为第二个文本框第一个文本框和第二个文本框更新选择项目。而对于第三个,没有反应?如何解决


文件:鼠标点击.py


import sys

from mouseclick_source import *


textbox1_item = ["Red", "Green", "Blue", "Brown", "White", "Black", "Grey", 

                  "Dark Red", "Dark Green", "Dark Blue"]

textbox2_item = ["Gold", "Silver", "Bronze", "Copper", "Iron", "Aluminium", 

                "Taitanium"]

textbox3_item = ["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.listbox2 = QListWidget()


        self.textbox1.setObjectName("textbox1")

        self.textbox2.setObjectName("textbox2")

        self.textbox3.setObjectName("textbox3")

        self.listbox1.setObjectName("listbox1")

        self.listbox2.setObjectName("listbox2")


        vbox = QVBoxLayout(self)

        vbox.addWidget(self.textbox1)

        vbox.addWidget(self.textbox2)

        vbox.addWidget(self.textbox3)

        vbox.addWidget(self.listbox1)


        QApplication.instance().focusChanged.connect(self.on_focusChanged)


    def on_focusChanged(self):

        fwidget = QApplication.focusWidget()

        if fwidget is not None:

            if fwidget.objectName() == "textbox1":

                self.listbox1.clear()

                self.listbox1.addItems(textbox1_item)


                self.getdetails_1 = Sourcefile(self.textbox1, self.listbox1, self.listbox2)

                #self.textbox1.textChanged.connect(self.getdetails_1.func_textbox_textchanged)

                self.listbox1.itemClicked.connect(self.getdetails_1.listbox_clicked)

                return True



慕的地6264312
浏览 92回答 1
1回答

BIG阳

问题可能是线路self.tbox1.setFocus()导致focusChanged信号再次发射。QListWidget 被清除并重新进货,因此没有当前项目文本,文本框设置为空字符串,给人一种“无响应”的感觉。无论如何,我在尝试运行代码时遇到了分段错误,所以我不得不更改它。所有的信号和槽连接都可以在主类中完成。从 QListWidget 中选择一个项目可以用currentTextChanged信号检测。在 focusChanged 上,保持指向最新聚焦的 QLineEdit 的指针。现在,当从列表小部件中选择一个项目时,您可以将文本设置为正确的文本框并重新对其应用焦点。import sysfrom 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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python