2011-12-11 23 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()))