Maison > Questions et réponses > le corps du texte
1.tableWidget怎么控制大小,能否用label来替代?
2.如何添加动作,点击目录后导出内容?
3.通过setColumnStretch
设置的列宽,在目录导出后,约束失效了,这是为什么?
import sys
from PyQt5.QtWidgets import *
import urllib.request as request
import Spider
class MainScene(QWidget):
def __init__(self):
super().__init__()
self.contextGrid()
self.show()
def contextGrid(self):
self.resize(500,300);
self.grid = QGridLayout()
self.setLayout(self.grid)
self.novelNameEdit = QLineEdit("http://xs.dmzj.com/2012/index.shtml")
self.searchBtn = QPushButton("Search")
self.blankLabel = QLabel("")
self.novelText = QLabel("Content")
self.grid.addWidget(self.novelNameEdit,0,0,1,1)
self.grid.addWidget(self.searchBtn,0,1,1,1)
self.grid.addWidget(self.blankLabel,0,2,1,3)
self.grid.addWidget(self.novelText,1,1,1,4)
self.grid.setColumnStretch(1,1)
self.grid.setColumnStretch(2,1)
self.grid.setColumnStretch(3,3)
self.searchBtn.clicked.connect(self.searchBtnClick)
def searchBtnClick (self):
pass
Sp = Spider.Catalogue()
content = request.urlopen(self.novelNameEdit.text()).read()
content = str(content, 'utf-8')
Sp.feed(content)
Sp.close()
catalogueCount = len(Sp.catalogueList)
tableWidget = QTableWidget(catalogueCount,1)
tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
for ca in range(catalogueCount):
tableWidget.setItem(ca,0,QTableWidgetItem(Sp.catalogueList[ca]))
self.grid.addWidget(tableWidget, 1, 0, 1, 1)
if __name__ == "__main__":
App = QApplication(sys.argv)
MS = MainScene()
sys.exit(App.exec_())
Spider.py
# -*- coding:utf-8 -*-
import html.parser as Pa
class Catalogue(Pa.HTMLParser):
a_t = False
alt = ""
title = ""
catalogueList = []
def handle_data(self, data):
if self.a_t is True:
self.catalogueList.append(data)
def handle_starttag(self, tag, attrs):
if str(tag).startswith("a"):
for key,value in attrs:
if key == "alt":
self.alt = value
elif key == "title":
self.title = value
elif key == "href" and (value.find("/2012/")) == 0 and (value.find("index.")) == -1 and (value.find(".txt")) == -1:
self.a_t = True
else:
self.a_t = False
def handle_endtag(self, tag):
if tag == "a":
self.a_t=False
class NovelText(Pa.HTMLParser):
a_t = False
def handle_starttag(self, tag, attrs):
if str(tag).startswith("p"):
for key,value in attrs:
if value == "novel_text":
self.a_t = True
break;
else:
self.a_t = False
def handle_data(self, data):
if self.a_t is True:
print(data)
怪我咯2017-04-18 09:05:56
1) Vous ne pouvez pas utiliser label à la place, ce n'est pas la même chose après tout
3) Voir la description de setColumnStretch
Définit le facteur d'étirement de la colonne pour s'étirer La première colonne est le numéro 0.
Le facteur d'étirement est relatif aux autres colonnes de cette grille. Les colonnes avec un facteur d'étirement plus élevé occupent plus d'espace disponible.
Le facteur d'étirement par défaut est 0. Si le facteur d'étirement est 0 et qu'aucune autre colonne ne se trouve dans la grille. cette table peut s'agrandir, la colonne peut encore s'agrandir.
Une approche alternative consiste à ajouter un espacement en utilisant addItem() avec un QSpacerItem.
2) Je pense que votre utilisation de tableWidget n'est pas standardisée. Il est recommandé d'en faire une variable membre
self.tableWidget = None
Initialisez ensuite le contextGrid, puis ajoutez-y dynamiquement des données en fonction de le nombre d'articles.
importer le système
à partir de l'importation PyQt5.QtWidgets *
à partir de l'importation PyQt5.QtWidgets *
importer urllib.request en tant que demande
importer une araignée
classe MyTableWidget(QTableWidget) :
def __init__(soi) :
super().__init__()
self.setMinimumWidth(400)
self.setColumnCount(1)
self.setColumnWidth(0, 400)
self.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.itemClicked.connect(self.handleItemClick)
def handleItemClick (soi, élément):
imprimer(article.text())
classe MainScene(QWidget) :
def __init__(self, parent=Aucun) :
super().__init__()
self.grid = QGridLayout()
self.setLayout(self.grid)
self.novelNameEdit = QLineEdit("http://xs.dmzj.com/2012/index.shtml")
self.searchBtn = QPushButton("Recherche")
self.novelText = QLabel("Contenu")
self.tableWidget = MonTableWidget()
self.grid.addWidget(self.novelNameEdit, 0, 0, 1, 2)
self.grid.addWidget(self.searchBtn, 0, 2, 1, 1)
self.grid.addWidget(self.tableWidget, 1, 0, 2, 2)
self.grid.addWidget(self.novelText, 1, 2, 1, 1)
self.resize(1024, 600)
self.searchBtn.clicked.connect(self.searchBtnClick)
def searchBtnClick (auto):
self.tableWidget.clear()
Sp = Spider.Catalogue()
content = request.urlopen(self.novelNameEdit.text()).read()
contenu = str(contenu, 'utf-8')
Sp.feed (contenu)
Sp.close()
catalogCount = len(Sp.catalogueList)
self.tableWidget.setRowCount(catalogueCount)
pour l'index, élément dans enumerate (Sp.catalogueList) :
self.tableWidget.setItem(index, 0, QTableWidgetItem(élément))
si __name__ == "__main__":
Application = QApplication (sys.argv)
MS = Scène principale()
MS.show()
sys.exit(App.exec_())