2011-12-11 25 views
1

正在學習使用eric ide來編程使用qt的python。但似乎有一個錯誤,我得到。Qurl未在pyqt中定義

它說全球QURL沒有定義或什麼。我如何定義Qurl?

from PyQt4.QtGui import QMainWindow 

from PyQt4.QtCore import pyqtSignature 
from Ui_mainwindow import Ui_MainWindow 

class MainWindow(QMainWindow, Ui_MainWindow): 
    """ 
    Class documentation goes here. 
    """ 
    def __init__(self, parent = None): 
     """ 
     Constructor 
     """ 
     QMainWindow.__init__(self, parent) 
     self.setupUi(self) 

    @pyqtSignature("") 
    def on_btnNavigate_released(self): 
     """ 
     Public slot invoked when the user clicks the Navigate Button . 
     """ 
     self.webView.load(QUrl("http://qt.nokia.com/")); 

上午以下this教程

回答

0

你沒有從任何地方進口QUrl。這樣做:

from PyQt4.QtCore import * 

注意,你也只是從QtCore進口QUrl,但*進口這裏是家常便飯,因爲QtCore是巨大的,所有類有Q前綴,所以不難猜測他們來自何處。這當然是風格問題,但我個人確實使用從QtCoreQtGui進口的*。 PyQt書籍樣本也是這樣做的。

+1

我其實不認爲它被認爲是'從PyQt4.QtCore導入*'常見的做法,因爲它可以混亂根名稱空間。這就是爲什麼pyuic4使用'從PyQt4導入QtCore'來導入其代碼。這是一個壞習慣,我也試圖讓自己停止做。 – jdi

+0

@jdi。是的,我同意關於帶星號的導入,尤其是因爲Qt將版本空間與版本4分開。一般來說,尤其是對於學習目的和示例代碼,「長手」形式通常會更清晰。話雖如此,在我自己的代碼中,我通常更願意顯式導入每個項目(如教程中所示),而不是導入'QtCore','QtGui'等等。但主要是:不要丟棄名稱空間信息! – ekhumoro

3

您發佈的代碼大部分由Eric4 IDE自動生成,作爲您發佈鏈接的教程的一部分。

如果你讀了教程仔細,它提到下面的代碼片段爲on_btnNavigate_released方法導入段落QUrlthis page(靠近頁面底部):

注意,這個工作,我們必須導入QUrl(查看教程附帶的源代碼)。

雖然,要對得起你的源代碼片段實際顯示有關進口線!它應該看起來更像是這樣的:

from PyQt4.QtCore import pyqtSignature, QUrl 
... 

@pyqtSignature("") 
def on_btnNavigate_released(self): 
    """ 
    Slot documentation goes here. 
    """ 
    self.webView.setUrl(QUrl(self.txtUrl.text()))