首页 > 解决方案 > 为什么列表没有附加而是被覆盖?

问题描述

我用 PyQt4 创建了一个布局。我想用在 QLineEdit ( lineNetworkId ) 和 ( lineMask ) 字段中输入的网络更新我的 QListView。

但我也想要一个更新的列表,其中包括所有这些输入的网络,以便进一步配置。

单击 addButton 后,我的 QListView 会在 GUI 中显示网络,但我的附加列表(bgp)每次都会被覆盖。

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):

        self.addButton.clicked.connect(System.addItem)


class System:

    def addItem(self):
        networks = {}
        bgp = []

        network = ui.lineNetworkId.text()
        mask = ui.lineMask.text()

        networks.update({network:mask})
        ui.listWidget.addItem(str("network {} mask {}".format(network, mask)))
        ui.lineNetworkId.clear()
        ui.lineMask.clear()

        for key, value in networks.items():
            bgp_add = 'network {0} mask {1}'.format(key, value)
            bgp.append(bgp_add)

        bgp_network = '\n  '.join(bgp)

        print(bgp)
        print(networks)
        print(ui.listWidget)

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

OUTPUT:
['network 1 mask 1']
{'1': '1'}
<PyQt4.QtGui.QListWidget object at 0x0656C350>
['network 2 mask 2']
{'2': '2'}
<PyQt4.QtGui.QListWidget object at 0x0656C350>

标签: pythonlistpyqt4

解决方案


每次单击按钮时,您都在调用函数 addItem:

self.addButton.clicked.connect(System.addItem)

没关系,但是每次调用函数时,您都在定义一个空列表: bgp = []

    def addItem(self):
        networks = {}
        bgp = []

你应该从函数 addItem(self) 中定义你的 bgp,比如:

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        self.bgp = []
        self.addButton.clicked.connect(System.addItem)

class System:
   def addItem(self):
       ...
       for key, value in networks.items():
           bgp_add = 'network {0} mask {1}'.format(key, value)
           Ui_MainWindow.bgp.append(bgp_add)

推荐阅读