从另一个脚本调用时,PyQt lineEdit 为空 [英] PyQt lineEdit is empty when called from another script

查看:99
本文介绍了从另一个脚本调用时,PyQt lineEdit 为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

This is my mainscript which calls some generated UI and defines a few functions:

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()

这是我从主脚本调用函数的另一个脚本:

This is the other script where I call the function from mainscript:

...
import mainscript

print("The user input from your other script is: " + mainscript.App().input_user())

我试图让 mainscript.App().input_user() 不显示为空(PyQt 的默认设置).

I'm trying to get mainscript.App().input_user() to not show up as empty (the default for PyQt).

推荐答案

编辑:

再想一想,正确的方法取决于如何使用 mainscript.如果将其用作启动脚本,则最初不会导入它,这会使稍后访问其全局变量时变得复杂.

On second thoughts, the right approach depends on how mainscript is used. If it is used as the start-up script, it will not be initially imported, which then complicates things when it comes to accessing its globals later on.

更好的方法是有一个非常简单的启动脚本,其中只包含这个:

A better approach is to have a very simple start-up script that only has this in it:

# mainscript
if __name__ == '__main__':
    from mainmodule import main
    main()

mainmodule 看起来像这样:

# 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 看起来像这样:

# othermodule
import mainmodule

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

这篇关于从另一个脚本调用时,PyQt lineEdit 为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆