Python 从其他脚本调用PyQt lineEdit时为空

Python 从其他脚本调用PyQt lineEdit时为空,python,pyqt5,Python,Pyqt5,这是我的主脚本,它调用一些生成的UI并定义一些函数: import uifile from PyQt5 import QtWidgets import sys class App(QtWidgets.QMainWindow, uifile.Ui_MyWindow): def __init__(self): super(self.__class__, self).__init__() self.setupUi(self) self.btn

这是我的主脚本,它调用一些生成的UI并定义一些函数:

import uifile

from PyQt5 import QtWidgets
import sys

class App(QtWidgets.QMainWindow, uifile.Ui_MyWindow):
    def __init__(self):
        super(self.__class__, self).__init__()
        self.setupUi(self)
        self.btn_clickMe.clicked.connect(self.some_function)
        return
    def some_function(self):
        import otherpyscript
    def input_user(self):
        user = self.lineEdit_username.text()
        return user

def main():
    app = QtWidgets.QApplication(sys.argv)
    form = App()
    form.show()
    app.exec_()


if __name__ == '__main__':
    main()
这是我从mainscript调用函数的另一个脚本:

...
import mainscript

print("The user input from your other script is: " + mainscript.App().input_user())
我正在尝试使
mainscript.App().input_user()
不显示为空(PyQt的默认值)。

编辑

仔细想想,正确的方法取决于如何使用
mainscript
。如果将其用作启动脚本,则最初不会导入该脚本,这将使以后访问全局脚本时的事情变得复杂

更好的方法是使用一个非常简单的启动脚本,其中只包含以下内容:

# mainscript
if __name__ == '__main__':
    from mainmodule import main
    main()
main模块
将如下所示:

# mainmodule
import sys
from PyQt5 import QtWidgets
import uifile

class App(QtWidgets.QMainWindow, uifile.Ui_MyWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.btn_clickMe.clicked.connect(self.some_function)
    def some_function(self):
        import othermodule
        othermodule.print_user()
    def input_user(self):
        user = self.lineEdit_username.text()
        return user

form = None

def main_window():
    return form

def main():
    global form
    app = QtWidgets.QApplication(sys.argv)
    form = App()
    form.show()
    app.exec_()
# othermodule
import mainmodule

def print_user():
    print("user input: " + mainmodule.main_window().input_user())
othermodule
将如下所示:

# mainmodule
import sys
from PyQt5 import QtWidgets
import uifile

class App(QtWidgets.QMainWindow, uifile.Ui_MyWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.btn_clickMe.clicked.connect(self.some_function)
    def some_function(self):
        import othermodule
        othermodule.print_user()
    def input_user(self):
        user = self.lineEdit_username.text()
        return user

form = None

def main_window():
    return form

def main():
    global form
    app = QtWidgets.QApplication(sys.argv)
    form = App()
    form.show()
    app.exec_()
# othermodule
import mainmodule

def print_user():
    print("user input: " + mainmodule.main_window().input_user())

嗯,
object1
App()
的新实例,所以它的行编辑显然是空的。@ekhumaro哦。。。那我怎么称呼它呢?请把代码加在那里。您还应该更清楚地解释您想做什么。@Ekhumaro我尝试创建另一个继承自LoginApp类的类,并通过该类运行函数,但没有成功。也许,在内部将函数作为self运行,然后将其设置为某个全局变量?仍在等待您执行我以前的请求;-)它当前仍在打印空字符串。我所做的:用你的类代码替换了我的类代码,尝试了无参数版本,尝试了在我的另一个脚本中定义一个打印函数,然后在
some\u function()
中调用该打印函数。完美!我几乎不知道发生了什么,但这是我可以努力的。谢谢你和我一起解决这个问题。@Prof.这很棘手。启动应用程序的脚本不会添加到
sys.modules
。因此,如果以后再次显式导入它,它的所有代码都将重新执行。这与所有其他模块不同,它们只执行一次。如果以后再次导入,python将重用存储在
sys.modules
中的模块对象。这对第一次执行模块时设置的任何全局变量都有影响。对于重新导入的启动脚本,全局变量将不相同。请允许我用另一个来麻烦您,我觉得它与此相关,因为它是初始化/执行的问题。