2017-01-17 3 views
1

Как обновить выпадающий в subwindow1 из subwindow2.The Следующий код должен работать нормально, но он оленья кожа обновления выпадающий и оленья кожа показывать ошибки в строкеPyQt5: Как общаться между двумя окнами?

AddressBook().updatestock(name) 

в надстройке function.It выглядит она создает экземпляр AddressBook.If так как я могу исправить его.

import os 
import sys 
from PyQt5.QtCore import * 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 
class menudemo(QMainWindow): 
    def __init__(self, parent=None): 
    super(menudemo, self).__init__(parent) 

    self.pilot_widget=AddInventory() 
    self.drop_widget=AddressBook() 

    self.centralWidget=QMdiArea(self) 
    self.setCentralWidget(self.centralWidget) 

    self.sub1=QMdiSubWindow() 
    self.sub1.setWidget(self.drop_widget) 
    self.centralWidget.addSubWindow(self.sub1) 
    self.sub1.show() 

    self.sub2=QMdiSubWindow() 
    self.sub2.setWidget(self.pilot_widget) 
    self.centralWidget.addSubWindow(self.sub2) 
    self.sub2.show() 
    self.setWindowTitle("menu demo") 
    self.showMaximized() 

class AddInventory(QWidget): 
def __init__(self, parent=None): 
    super(AddInventory, self).__init__(parent) 
    self.statement="" 
    self.nameLabel = QLabel("Item:") 
    self.name=QLineEdit() 
    self.addButton = QPushButton("&Add") 
    self.addButton.setDefault(True) 
    self.addButton.clicked.connect(self.add) 
    mainLayout = QGridLayout() 
    mainLayout.addWidget(self.nameLabel, 0, 0) 
    mainLayout.addWidget(self.name,0,1) 
    mainLayout.addWidget(self.addButton, 0, 3) 
    self.setLayout(mainLayout) 
    self.setWindowTitle(" Address Book") 
    self.setFixedSize(self.sizeHint()) 
def add(self,text): 
    name=self.name.text() 
    AddressBook().updatestock(name) 
    self.name.clear() 

class AddressBook(QWidget): 
def __init__(self, parent=None): 
    super(AddressBook, self).__init__(parent) 


    nameLabel2 = QLabel("Item:") 
    self.itemstock=QComboBox(self) 
    self.itemstock.activated[str].connect(self.updatestock) 
    mainLayout = QGridLayout() 
    mainLayout.addWidget(nameLabel2, 0, 0) 
    mainLayout.addWidget(self.itemstock, 0, 1) 
    self.setLayout(mainLayout) 
    self.setWindowTitle("Simple Address Book") 
    self.setFixedSize(self.sizeHint()) 

def updatestock(self,name): 
    print(name) 
    self.itemstock.addItem(name) 

def main(): 
app = QApplication(sys.argv) 
ex = menudemo() 
ex.show() 
sys.exit(app.exec_()) 

if __name__ == '__main__': 
main() 

ответ

1

Это не работает, потому что вы просто создать новый экземпляр AddressBook, вы вызываете метод на нем.

Это не связано с self.drop_widget

Вы должны связать оба виджета с помощью конструктора. Вы можете сделать это в main

self.pilot_widget=AddInventory() 
self.drop_widget=AddressBook() 

Я хотел бы сделать:

self.drop_widget=AddressBook() 
self.pilot_widget=AddInventory(self.drop_widget) 

и изменить параметры AddInventory класса

class AddInventory(QWidget): 
    def __init__(self, drop_widget, parent=None): 
     self.drop_widget = drop_widget # now it is linked in your class as a member 

сейчас, в add:

def add(self,text): 
    name=self.name.text() 
    self.drop_widget.updatestock(name) 
    self.name.clear() 
+0

спасибо .. , .works, как шарм ... что можно сделать, если было много окон и изменения должны отражаться во всех окнах. – Prethiv

Смежные вопросы