python - 为什么列表没有附加而是被覆盖?
问题描述
我用 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>
解决方案
每次单击按钮时,您都在调用函数 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)
推荐阅读
- python - 如何在 .py 文件中设置 Anaconda 环境?
- javascript - 错误:未实现:window.scrollTo。我们如何从 Jest 测试中删除这个错误?
- mysql - SEL * 与 SEL 列
- android - 在主项目中显示注释
- directions - 在 Kakao 地图上显示路线,以 url 编码的开始/目的地
- python - 相当于 tensorflow 2.0 beta1 中的 tf.assign?
- flutter - 问题在列中展开的列表视图上方呈现小部件
- python - Pip 要为一个包删除的文件列表在哪里
- php - 从php调用动态axsoap服务方法时出错
- python - 在 Python 中将图像保存为 OIB 文件