【问题标题】:How do I call an GUI object or more from main class如何从主类调用 GUI 对象或更多对象
【发布时间】:2015-12-28 19:29:56
【问题描述】:

我有一个 gui 应用程序

  1. 我将文本放入文本框1、文本框2,然后点击pushButton
  2. moduel_b.py 中的函数return_text_username () 被调用。 现在我可以通过lambda1函数调用一个实例并在class_b中使用它,但是当我点击pushbutton时我不能调用两个瞬间。

**A- 我想将 lineEdit_2 添加到 main.py 的 lambda 方法中或将 instance_lambda2_password 添加到 connect 方法中。

**B- 我想在moduel_b.py 中编辑return_printtext_password (self, txt) 以打印并返回密码。

谁能帮帮我? 这是代码:

main.py

# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys
from GUI import Ui_MainWindow
class MainWindow(QtGui.QMainWindow,Ui_MainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        from module_b import calss_b
        global instance_b
        instance_b=calss_b(self)
        instance_lambda1_username=lambda: instance_b.return_text_username(self.ui.lineEdit.text())##I want to add lineEdit_2 
        instance_lambda2_password=lambda: instance_b.printtext2(self.ui.lineEdit_2.text())
        QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), \
        instance_lambda1_username)## Or add instance_lambda2_password here.


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    global myapp
    myapp = MainWindow()
    myapp.show()
    sys.exit(app.exec_())

module_b.py

import sys
from GUI import Ui_MainWindow
from PyQt4 import QtCore, QtGui
class calss_b (object):
     def __init__(self, parent=None):
      pass


     def return_text_username (self, txt):
        username=unicode(txt) 
        print username  
        return username 

      ## I want print password and return it.   
     def return_printtext_password (self, txt):
        password=unicode(txt) 
        print password   
        return password  

【问题讨论】:

  • 所以基本上,您想将pushButton clicked 信号连接到两种方法(return_text_usernamereturn_printtext_password)?
  • @Iron Fist 是的>>>>>>>>>>>>>>>
  • 但这意味着向他们每个人(return_text_usernamereturn_printtext_password)传递来自 self.lineEdit1self.lineEdit2 的不同文本,对吧?
  • @Iron Fist >>> 当然
  • 为什么不把return_text_usernamereturn_printtext_password合并成一个方法,你可以返回一个元组return username, password

标签: python lambda pyqt4 call instance


【解决方案1】:

您不需要为每个slot 定义lambda 函数,而是将它们组合成一个并将其传递给您的connect 方法,这样:

txt1 = self.ui.lineEdit.text #Method reference not Method call
txt2 = self.ui.lineEdit2.text 
mySlot = lambda : (instance_b.return_text_username(txt1()), instance_b.return_printtext_password(txt2()))# Passed to lambda method call this time
QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"),  mySlot)

至于 B 点,我想你已经做到了,

 def return_text_username (self, txt):
     username=unicode(txt) 
     print username  
     return username 

【讨论】:

  • 没有 pblm @AhmadAli .. :)
  • 当我们有表格和这么多的 tx3,txt4,txt5......txt 50 时,还有什么更好的代码编写方式???
  • @AhmadAli...不清楚,你能把帖子作为一个问题,详细说明一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 2018-05-01
相关资源
最近更新 更多