標籤:

PyQt4教程的對話框(QInputDialog)例子里的一段代碼,為什麼要這樣寫?

def showDialog(self):
text, ok = QtGui.QInputDialog.getText(self, "Input Dialog",
"Enter your name:") #這裡這裡,為什麼要寫成「text, ok = 」這種形式?
#其他的QtGui的窗體、控制項什麼的都是一個變數名,
#這裡為什麼要用兩個寫在一起?有什麼特殊的原因嗎?

if ok:
self.label.setText(str(text))


根據PyQt的文檔:

http://pyqt.sourceforge.net/Docs/PyQt4/qinputdialog.html#getText

(QString, bool ok) getText (QWidget parent, QString title, QString label, QLineEdit.EchoMode mode = QLineEdit.Normal, QString text = QString(), Qt.WindowFlags flags = 0)

這個getText()函數返回的是一個二元tuple。

其第一個元是QString,

If the dialog is accepted, this function returns the text in the dialog"s line edit. If the dialog is rejected, a null QString is returned.

其第二元是個Bool,

ok will be set to true if the user pressed OK and to false if the user pressed Cancel.

題主可能是對Python的tuple類型以及其相關的解構賦值(destructuring assignment)不熟悉。

例如說:

$ python
Python 2.7.5 (default, Mar 9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
&>&>&> t = (1, 2)
&>&>&> type(t)
&
&>&>&> x, y = t
&>&>&> x
1
&>&>&> y
2
&>&>&> def foo():
... return ("Yay", True)
...
&>&>&> text, ok = foo()
&>&>&> text
"Yay"
&>&>&> ok
True
&>&>&> quit()


因為這個函數的返回值有兩個啊,詳細內容可以參見 PyQt 的文檔http://pyqt.sourceforge.net/Docs/PyQt4/qinputdialog.html#getText


這跟pyqt沒關係,你是python還沒入門...


你學過python嗎


推薦閱讀:

有哪些顏值高的 PyQt/Qt 應用?
cmd打命令的時候,有時參數是個很長的路徑,輸入非常麻煩,怎樣解決?

TAG:Python | PyQt |