代码之家  ›  专栏  ›  技术社区  ›  Vaebhav

如何在pyqt5中使用connect从另一个类调用方法

  •  0
  • Vaebhav  · 技术社区  · 8 年前

    我试图创建一个简单的gui应用程序,其结构如下

    class MainWindow(QMainWindow):
    
    def __init__(self):
        super().__init__()
        self.init_ui()
    
    def init_ui(self):
        self.table_widget = MainTabWindow()
        self.setCentralWidget(self.table_widget)
        self.show()
    
    
    
    class MainTabWindow(QTabWidget):
    
    def __init__(self,parent=None):
        #super(QWidget, self).__init__(parent)
        super(MainTabWindow, self).__init__(parent)
        self.init_ui()
    
    def init_ui(self):
        self.setWindowTitle('PyQt5 Tab Example')
    
        self.layout = QVBoxLayout(self)
        #self.selected_date = QDate.currentDate()
        #self.tabs = QTabWidget()
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.tab3 = QWidget()
        self.tab4 = QWidget()
        #self.buttonLayout = QMainWindow()
    
        self.addTab(self.tab1,"Search")
        self.addTab(self.tab2,"Add/Update")
        self.addTab(self.tab3,"Billing Summary")
        self.addTab(self.tab4,"Search2")
    
        self.SearchTab()
        self.PGCreationTab()
        self.BillingSummaryTab()
    
    def PGCreationTab(self):
      layout = QFormLayout()
      policy = QSizePolicy()
      layout.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy(2))
      PG_obj = PGDetails()
      fn = PG_obj.setFirstName()
      layout.addRow("FirstName",fn)
      fn.textChanged.connect(PG_obj.getText)
    
    def main():
        application = QApplication(sys.argv)
        main_window = MainTabWindow()
        main_window.show()
        sys.exit(application.exec_())
    
    if __name__ == '__main__':
        main()
    

    pgdetails类-

    class PGDetails():
    
    def __init__(self,parent=None):
        self.obj = 5
        #self.FirstName = QLineEdit()
        #self.FirstName.setValidator(QIntValidator())
    
    def setFirstName(self):
        self.FirstName = QLineEdit()
        #print("Inside")
        #print(self.FirstName.text())
        return self.FirstName
    
    def getText(self):
        print("Inside")
        print(self.FirstName.text())
    

    我无法检查名字行框中的任何文本更改,gettext函数永远不会被调用。

    如果我使用self,它会抛出一个错误,因为在maintabwindow中没有定义gettext

    如何从maintabwindow类内部调用gettext函数

    1 回复  |  直到 8 年前
        1
  •  0
  •   eyllanesc    8 年前

    从函数创建的变量只存在到函数结束,除非它的范围更大,在您的情况下 PG_obj 是一个局部变量,当 PGCreationTab 函数结束。解决办法是 PGO OBJ 具有更大的范围,例如使其成为 MainTabWindow 班级。

    ...
    self.PG_obj = PGDetails()
    fn = self.PG_obj.setFirstName()
    layout.addRow("FirstName",fn)
    fn.textChanged.connect(self.PG_obj.getText)