【问题标题】:Pyside: How to use QInputDialog.getTextPyside:如何使用 QInputDialog.getText
【发布时间】:2016-10-31 01:40:18
【问题描述】:

我是 PySide 的新手,我正在尝试让用户输入一些文本。然后我想将它存储在一个变量中,并通过我拥有的单独脚本在搜索中使用它。我拥有的搜索脚本通过一个文本文件进行解析,以查找用户输入的关键字。首先,我试图将输入文本存储在一个变量中,并且我正在测试它是否使用简单的打印语句存储。

正如您将在下面看到的,我已对其进行了设置,以便弹出一个输入框并让用户输入一些文本。但是,如果我在showDialog 之外调用打印,则不会打印任何内容。如果我在showDialog 内打印,它工作正常。为什么不在函数外打印?

如果有更好的方法,请随时教育我。

import sys
from PySide import QtGui

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):
        self.btn = QtGui.QPushButton('test', self)
        self.btn.move(20, 20)
        self.btn.clicked.connect(self.showDialog)

        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('Input dialog')
        self.show()


    start = ''
    end = ''
    number = ''

    def showDialog(self):
        global start
        start = start, ok = QtGui.QInputDialog.getText(self, 'text',
                                               'Enter some text')
        global end
        end = end, ok = QtGui.QInputDialog.getText(self, "text",
                                         "Enter some text")
        global number
        number = number, ok = QtGui.QInputDialog.getText(self, "text",
                                                "Enter some text")

    # I'm trying to print out the text stored from the input variables.
    print start
    print end
    print number

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

【问题讨论】:

    标签: python-2.7 global-variables pyside


    【解决方案1】:

    startendnumber 变量没有全局范围。它们在类范围内声明和打印,仅在创建类时发生一次

    但无论如何,使用全局变量通常是个坏主意。如果您想让变量可用于其他方法,请改用实例属性:

    def showDialog(self):
        self.start, ok = QtGui.QInputDialog.getText(self, 'text', 'Enter some text')
        self.end, ok = QtGui.QInputDialog.getText(self, "text", "Enter some text")
        self.number, ok = QtGui.QInputDialog.getText(self, "text", "Enter some text")
        print self.start
        print self.end
        print self.number
    

    编辑

    下面是一个简单的演示,展示了如何构建程序。这假设您可以导入您的搜索模块并运行其功能之一来获取搜索结果。

    import sys
    from PySide import QtCore, QtGui
    # import mysearch
    
    class Example(QtGui.QWidget):
        def __init__(self):
            super(Example, self).__init__()
    
            self.resultsBox = QtGui.QTextEdit()
            self.resultsBox.setReadOnly(True)
    
            self.startBox = QtGui.QLineEdit()
            self.startBox.setPlaceholderText('Enter Start')
            self.endBox = QtGui.QLineEdit()
            self.endBox.setPlaceholderText('Enter End')
            self.numberBox = QtGui.QLineEdit()
            self.numberBox.setPlaceholderText('Enter Number')
    
            self.searchButton = QtGui.QPushButton('Search')
            self.searchButton.clicked.connect(self.runSearch)
    
            layout = QtGui.QGridLayout(self)
            layout.addWidget(self.resultsBox, 0, 0, 1, 4)
            layout.addWidget(self.startBox, 1, 0)
            layout.addWidget(self.endBox, 1, 1)
            layout.addWidget(self.numberBox, 1, 2)
            layout.addWidget(self.searchButton, 1, 3)
    
        def runSearch(self):
            start = self.startBox.text()
            end = self.endBox.text()
            number = self.numberBox.text()
            if start and end and number:
                self.resultsBox.clear()
                self.resultsBox.append('Start: %s' % start)
                self.resultsBox.append('End: %s' % end)
                self.resultsBox.append('Number: %s\n' % number)
                # run search script ...
                # results = mysearch.run(start, end, number)
                results = 'Hello World'
                self.resultsBox.append(results)
    
    if __name__ == '__main__':
    
        app = QtGui.QApplication(sys.argv)
        example = Example()
        example.show()
        sys.exit(app.exec_())
    

    【讨论】:

    • 您好 Ekhumoro,感谢您的回复。但我想要做的是能够访问 showDialog 函数之外的用户输入。通过提供的示例,我仍然只能访问函数中的用户输入。如何访问函数和类之外的用户输入?
    • @user6534872。这在您的答案中的脚本上下文中没有任何意义。 Example 窗口关闭后,程序将退出。当窗口打开时,运行其他代码的唯一方法是通过用户交互 - 这意味着您必须使用类的方法。
    • @user6534872。我认为您当前的脚本结构不正确。输入框应该都在主窗口中。用户输入值后,应启用搜索按钮。单击搜索按钮时,它将运行您的搜索脚本,结果将显示在文本框中。
    • 谢谢@Ekhumoro!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2021-03-13
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    相关资源
    最近更新 更多