recherche

Maison  >  Questions et réponses  >  le corps du texte

python - PyQt5如何给tablewidget添加点击事件?除了tablewidget还有什么具有scroll?

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)
巴扎黑巴扎黑2802 Il y a quelques jours1422

répondre à tous(1)je répondrai

  • 怪我咯

    怪我咯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_())
    

    répondre
    0
  • Annulerrépondre