#python #list #pyqt4
#python #Список #pyqt4
Вопрос:
Я создал макет с помощью PyQt4. Я хочу обновить свой QListView сетями, введенными в полях QLineEdit (lineNetworkId) и (lineMask).
Но также я хочу иметь обновленный список, который включает все эти введенные сети для дальнейшей настройки.
Мой QListView показывает сети в графическом интерфейсе после нажатия кнопки addButton, это работает, но мой дополнительный список (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>
Комментарии:
Ответ №1:
каждый раз, когда нажимается кнопка, вы вызываете функцию addItem:
self.addButton.clicked.connect(System.addItem)
это нормально, но каждый раз, когда вы вызываете функцию, вы определяете пустой список: bgp = []
def addItem(self):
networks = {}
bgp = []
вы должны определить свой bgp из функции addItem (self), например :
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)
Комментарии:
1. спасибо за ваш ответ, я уже думал, что эта проблема должна быть связана с чем-то подобным. Я попробовал это, но получил следующую ошибку: Ошибка: Трассировка (последний последний вызов): Файл «C: «, строка 265, в addItem self.bgp.append(bgp_add) Ошибка атрибута: объект ‘bool’ не имеет атрибута ‘bgp’ «‘класс Ui_MainWindow(object): def setupUi(self, MainWindow): self.addButton.clicked.connect(System.addItem) self.bgp = []
2. ПРИМЕЧАНИЕ: в системе классов вам нужно использовать bgp, такой как Ui_MainWindow.bgp.append(bgp_add), потому что bgp определен в классе Ui_MainWindow @Maximilian
3. ui.bgp.append(bgp_add) сработал для меня, большое вам спасибо. 🙂