2016-10-30 3 views
0

Я новичок в PySide, и я пытаюсь ввести пользователя в текст. Я хочу сохранить его в переменной и использовать в поиске через отдельный скрипт, который у меня есть. Сценарий поиска, который у меня есть, хотя текстовый файл ищет ключевые слова, которые пользователь должен был ввести. Во-первых, я пытаюсь получить вводный текст для хранения в переменной, и я тестирую его, сохраняя его, используя простой оператор печати.Pyside: Как использовать QInputDialog.getText

Как вы увидите ниже, я настроил его так, чтобы окно ввода появилось и пользователь ввел какой-либо текст. Но тогда, если я назову печать за пределами 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() 

ответ

1

В start, end и number переменные не имеют глобальный масштаб. Они объявляются и печатаются в области класса, которая происходит только после, когда класс создан.

Но в любом случае, как правило, это плохая идея использовать глобальные переменные. Если вы хотите, чтобы сделать переменные доступными для других методов, использовать атрибуты экземпляра вместо:

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 

EDIT:

Ниже приведен простой демо, показывающий, как можно структурировать вашу программу. Это предполагает, что вы можете импортировать свой модуль поиска и выполнить одну из своих функций, чтобы получить результаты поиска.

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_()) 
+0

Hi Ekhumoro, Спасибо за ваш ответ. Но я хочу, чтобы иметь доступ к входам пользователей вне функции showDialog. В приведенном примере я все же могу получить доступ только к входам пользователей в пределах функции. Как я могу получить доступ к входам пользователей вне функции и класса? – user6534872

+0

@ пользователь6534872. Это не имеет никакого смысла в контексте сценария в вашем ответе. После закрытия окна «Пример» программа завершит работу. Пока окно открыто, единственный способ запускать другой код - это взаимодействие с пользователем, что означает, что вы должны использовать методы класса. – ekhumoro

+0

@ пользователь6534872. Я думаю, что ваш текущий скрипт не структурирован правильно. Все поля ввода должны находиться в главном окне. После того, как пользователь ввел значения, должна быть включена кнопка поиска. Когда нажата кнопка поиска, она запустит ваш поисковый скрипт, и результаты будут показаны в текстовом поле. – ekhumoro

Смежные вопросы