我在python中教自己面向对象的编程。我使用的是基本的GUI和简单的Web解析器 - 两者都在单独的类文件中。我的目标是从GUI调用Web解析器。
我的网络解析器类只下载一个页面并将其存储为列表。当我在GUI上按下按钮时,我想要一个简单的网页打印输出。除了我遇到问题。当我单击按钮时,它表明我的'解析器'名称未定义。我开始有点困惑了。如果有人能让我弄清楚那会很棒。感谢。
我的网络解析器:
from BeautifulSoup import BeautifulSoup
import urllib2
class Parser(object):
def __init__(self, url):
self.url = url
self.contents = ''
def download_page(self):
#open the page
page=urllib2.urlopen(self.url)
soup = BeautifulSoup(page.read())
page_find=soup.findAll('td')
#lists for storing page data
page_list = []
#Store HTML table data into list
for page_data in page_find:
page_list.append(page_data.string)
return page_list
if __name__ == '__main__':
url = "http://www.any_url"
Parser = Parser(url)
print Parser.download_page()
我的GUI类如下:
class Example(QtGui.QMainWindow):
def __init__(self):
super(Example, self).__init__()
#Made changes here
self.url = url
self.parser = Parser(url)
self.initUI()
def initUI(self):
parse_list = []
btn1 = QtGui.QPushButton("Button 1", self)
btn1.move(30, 50)
btn1.clicked.connect(self.buttonClicked)
self.statusBar()
self.setGeometry(300, 300, 290, 150)
self.show()
#supposed to call web parser when button is pressed
def buttonClicked(self):
parse_list = parser.download_page()
print parse_list
sender = self.sender()
self.statusBar().showMessage(sender.text() + ' was pressed')
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
如果名称 =='主要': main()的
答案 0 :(得分:2)
parse_list = parser.download_page
应该是
parse_list = parser.download_page()
括号告诉Python调用该方法。如果没有括号,parser.download_page
引用方法对象本身。 Python中的函数是first-class objects。
要解决NameError
问题,请在parser
中设置initUI
个实例属性:
self.parser = Parser(url)
然后用
引用它parse_list = self.parser.download_page()
buttonClicked
中的。 (而且,显然,您需要定义url
。)