请教在pyqt5里面为何一点击按钮进行响应进程就自动结束没有报错?

CoolMin_KonMin 2019-06-12 09:46:32
代码如下:

#!/usr/bin/python
# -*- coding:utf-8 -*-

'''os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
user_agent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
headers = {'User-Agent': user_agent}
start_urls = 'http://tieba.baidu.com/f/search/res?ie=utf-8'

kw = 'eng'

url = start_urls + kw
request=urllib.request.Request(url,headers=headers)
reponse=urllib.request.urlopen(request).read()
print(reponse)
'''

#!/usr/bin/env python
# -*- coding :gb2312 -*-
import urllib.request
import urllib.parse
import sys
from urllib.request import urlopen
from bs4 import BeautifulSoup
import time
import tiebaUI
class TieBa():

def __init__(self):
app = tiebaUI.QtWidgets.QApplication(sys.argv)
MainWindow = tiebaUI.QtWidgets.QMainWindow()
MainWindow.show()
self.ui = tiebaUI.Ui_MainWindow()
self.ui.setupUi(MainWindow)
self.ui.pushButton.clicked.connect(TieBa.start)
self.kw = "222"
self.kw2 = "333"
self.beginPage = endPage = 0
self.kw_url = "http://tieba.baidu.com/f?"
self.kw2_url = "http://tieba.baidu.com"
self.ui.textEdit.setText('不需要带“吧”字')
sys.exit(app.exec_())


def writeAl(self,all_nr_print):
# now = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
# now = time.strftime("%Y%m%d%H", time.localtime(time.time()))
# fname = (kw + "吧_" + kw2 + now + r".txt")
'''
fname = (self.kw + "吧_P" + str(self.beginPage) + "-P" + str(self.endPage) + "_" + self.kw2 + r".txt")
with open(fname, 'a') as f:
f.write(all_nr_print+"\n")
'''


def all_nr(self,full_url):
html = urlopen(full_url)
bsObj = BeautifulSoup(html, 'html.parser')
t1 = bsObj.find_all('a')
for t2 in t1:
t3 = str(t2.get('href'))
t31 = str(t2.get('title'))
if len(t3) == 13:
if self.kw2 in t31:
all_nr_print = t31 + " " + str(self.kw2_url) + str(t3)
print(all_nr_print)
self.writeAl(all_nr_print)


def tiebaSpider(self,kw_url, beginPage, endPage):
for page in range(beginPage, endPage + 1):
pn = (page - 1) * 50
full_url = kw_url + "&pn=" + str(pn)
#print("\n%s"% full_url)
self.all_nr(full_url)
# writeAl(full_url)

def start(self):
print('111')
self.kw = '222'
print(self.kw)
问题在这里,点击按钮之后能正常输出111,但是后面就自动退出了,这个令self.kw = 222也是用来测试的,其实是如下被注释的代码,想获取文本框内容然后赋值给kw。但是臣妾做不到啊,求大佬指教一下,自己真的解决不来了,只能来发帖了.....



# self.kw2 = ui.textEdit.toPlainText()
# self.beginPage = ui.textEdit_3.toPlainText()
# self.endPage = ui.textEdit_4.toPlainText()
# print('222')
# kw_key = urllib.parse.urlencode({"kw": self.kw})
# full_url = self.kw_url + kw_key
# self.tiebaSpider(full_url, self.beginPage, self.endPage)

#print(self.kw,self.kw2,self.beginPage,self.endPage)
'''
kw = input('请输入贴吧名:')
beginPage = int(input("请输入起始页:"))
endPage = int(input("请输入结束页:"))
kw2 = input('请输入帖子主题的\"关键词\":')
kw_url = "http://tieba.baidu.com/f?"
kw2_url = "http://tieba.baidu.com"
kw_key = urllib.parse.urlencode({"kw": kw})
full_url = kw_url + kw_key
tiebaSpider(full_url, beginPage, endPage)

'''

if __name__ == '__main__':
TieBa()



刚开始学pyqt5做爬虫界面,可能有些代码写的很奇怪,主要是一直在该描述的错误,到后面改得很乱了。另外我是引用的ui文件,然后逻辑是在上面这个py文件里面实现的,没有问题吧。

ui.py的代码如下:



# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'tiebaUI.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QHeaderView


class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1000, 450)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
MainWindow.setMinimumSize(QtCore.QSize(1000, 450))
MainWindow.setMaximumSize(QtCore.QSize(1000, 450))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 10, 81, 31))
self.label.setTextFormat(QtCore.Qt.AutoText)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(100, 10, 150, 31))
self.textEdit.setObjectName("textEdit")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(280, 10, 81, 31))
self.label_2.setTextFormat(QtCore.Qt.AutoText)
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.textEdit_2 = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_2.setGeometry(QtCore.QRect(370, 10, 150, 31))
self.textEdit_2.setObjectName("textEdit_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(580, 10, 81, 31))
self.label_3.setTextFormat(QtCore.Qt.AutoText)
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_3.setGeometry(QtCore.QRect(670, 10, 71, 31))
self.textEdit_3.setObjectName("textEdit_3")
self.textEdit_4 = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_4.setGeometry(QtCore.QRect(860, 10, 71, 31))
self.textEdit_4.setObjectName("textEdit_4")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(770, 10, 81, 31))
self.label_4.setTextFormat(QtCore.Qt.AutoText)
self.label_4.setAlignment(QtCore.Qt.AlignCenter)
self.label_4.setObjectName("label_4")
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setGeometry(QtCore.QRect(10, 140, 981, 271))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.tableWidget.sizePolicy().hasHeightForWidth())
self.tableWidget.setSizePolicy(sizePolicy)
self.tableWidget.setMidLineWidth(1)
self.tableWidget.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
self.tableWidget.setAutoScroll(True)
self.tableWidget.setTabKeyNavigation(True)
self.tableWidget.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerItem)
self.tableWidget.setColumnCount(3)
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setRowCount(0)
self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive)
item = QtWidgets.QTableWidgetItem()
item.setTextAlignment(QtCore.Qt.AlignCenter)
self.tableWidget.setHorizontalHeaderItem(0, item)
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(860, 70, 121, 61))
self.pushButton.setObjectName("pushButton")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(320, 80, 521, 41))
self.lineEdit.setObjectName("lineEdit")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(240, 80, 71, 41))
self.label_5.setObjectName("label_5")
self.label_6 = QtWidgets.QLabel(self.centralwidget)
self.label_6.setGeometry(QtCore.QRect(20, 70, 141, 21))
self.label_6.setObjectName("label_6")
self.label_7 = QtWidgets.QLabel(self.centralwidget)
self.label_7.setGeometry(QtCore.QRect(20, 100, 141, 21))
self.label_7.setObjectName("label_7")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1000, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "贴吧关键词帖子筛选工具"))
self.label.setText(_translate("MainWindow", "吧名:"))
self.label_2.setText(_translate("MainWindow", "关键字:"))
self.label_3.setText(_translate("MainWindow", "起始页:"))
self.label_4.setText(_translate("MainWindow", "结束页:"))
self.tableWidget.setHorizontalHeaderLabels(['贴名','地址','时间'])
self.pushButton.setText(_translate("MainWindow", "开始"))
self.label_5.setText(_translate("MainWindow", "当前状态:"))
self.label_6.setText(_translate("MainWindow", "作者:KONMIN"))
self.label_7.setText(_translate("MainWindow", "版本:v0.0.1"))

...全文
2217 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
menwenliang0 2021-01-07
  • 打赏
  • 举报
回复
我的是获取文本方法用错了,你们的应该也是这个原因,当然和我错的方法可能不一样,建议加打印,看挂在哪一行。再对应查方法
menwenliang0 2021-01-07
  • 打赏
  • 举报
回复 2
我找到原因了,我加了打印。就是方法不对导致程序退出了,获取文本信息的方法QtWidgets.QTextEdit 对应获取文本的方式为self.textEdit.toPlainText()。而QtWidgets.QLineEdit() 对应的self.text.text()
ntwison2 2020-12-12
  • 打赏
  • 举报
回复
和我一样的问题
fresh_nam 2020-07-16
  • 打赏
  • 举报
回复 1
TieBa类中的 self.ui.pushButton.clicked.connect(TieBa.start)应该是self.ui.pushButton.clicked.connect(self.start)吧
写代码的资资 2020-03-07
  • 打赏
  • 举报
回复
同样问题暴风哭泣
狼独舞 2020-02-26
  • 打赏
  • 举报
回复 2
遇到完全一样的问题了,网上真没有这个案例,同样的引用UI文件,同样的内置信号,自定义槽函数,同样的想在槽函数里干点自定义的事,同样的点击按钮就自动结束程序了,同样的没有任何错误提示。 求解。
包子789654 2019-08-15
  • 打赏
  • 举报
回复 1
楼主问题解决了吗,我也遇到过了,PyQt5点击事件按钮一会没有反应就自动结束了,也不报错。
后来找了好久才发现一个单词拼错了。
不知道什么原因,求大神支招
CoolMin_KonMin 2019-06-12
  • 打赏
  • 举报
回复 1
刚开始学pyqt5,做第一个爬虫界面....求指导哇~~~能这么引用ui.py然后实现逻辑的吧?

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧