2012-07-27 58 views
1

我正在學習Pyside,我似乎無法從QLineEdit中將文本輸入到我自己的方法中,以便我可以將它輸入到查詢中等。我知道它與lineEdit.text()有關,但它不是似乎沒有工作。在文本進入我的變量之前,我是否需要將它與信號相關聯?如何從Pyside的lineEdit獲取文本?

這是我一直在嘗試的類型。我需要一個textChanged信號來讓它更新或什麼?我已經嘗試添加self.line,但是這也不起作用,在面向對象編程方面有點生疏。

line=QtGui.QLineEdit(self) 
myVar = line.text() 

一個短代碼的例子會很好。謝謝!

回答

3

您似乎在創建對象並在之後使用它。當然,你從text()得到一個空字符串;它不這樣工作。

您應該將QLineEdit添加到GUI,讓用戶使用它做一些事情,然後獲取文本QLineEdit.text()。要知道用戶何時更改文本,是的,您應該連接到QLineEdit. textEdited插槽。

下面是一個完整的示例,它使用這種機制將所有文本從QLineEdit複製到QLabel只要它被修改。

import sys 

from PySide.QtCore import * 
from PySide.QtGui import * 

class MainWindow(QWidget): 
    def __init__(self): 
     QWidget.__init__(self) 

     layout = QVBoxLayout() 
     self.setLayout(layout) 

     self.line_edit = QLineEdit() 
     layout.addWidget(self.line_edit) 

     self.label = QLabel() 
     layout.addWidget(self.label) 

     self.line_edit.textChanged.connect(self.line_edit_text_changed) 

     self.show() 

    def line_edit_text_changed(self, text): 
     self.label.setText(text) 

app = QApplication(sys.argv) 
mw = MainWindow() 
app.exec_() 

這個例子展示瞭如何將自己的功能連接到插槽。但由於QLabel有一個setText插槽,我們可以做self.line_edit.textChanged.connect(self.line_edit.setText)而不是定義一個函數。

P.S.你真的應該閱讀一些教程;我發現this one非常有用。

+0

我不假設你可以顯示QLineEdit.text()與QLineEdit.textEdited信號一起使用嗎? – Jay 2012-07-27 06:30:07

+1

哦,我一直在閱讀教程,它不是現有信號和插槽之間的數據在預先存在的pyside項目之間移動,這些信息和插槽讓我感到興奮。它將數據移動到我自己的變量中去到數據庫等等。我在屏幕上的內容非常接近你寫的內容,我會一直盯着它,因爲我必須靠近。謝謝您的幫助!!! – Jay 2012-07-27 07:01:20

+0

最後一個應該是'self.line_edit.textChanged.connect(self.label.setText)'(標籤而不是line_edit) – goetzc 2015-09-26 18:46:56