Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QT4(PyQt4)QTableWidget信号在应该触发时未触发_Python_Qt_User Interface_Qt4_Pyqt - Fatal编程技术网

Python QT4(PyQt4)QTableWidget信号在应该触发时未触发

Python QT4(PyQt4)QTableWidget信号在应该触发时未触发,python,qt,user-interface,qt4,pyqt,Python,Qt,User Interface,Qt4,Pyqt,我正在编写一个论坛帖子数据库的接口 在上面的程序中,有一个工具箱小部件,其中包含两个主题浏览器处于活动状态的小部件。主题浏览器由一个垂直布局的父QFrame组成,该框架包含主题论坛类别标签、导航控制小部件和小部件主体(即QTableWidget(QTW))。QTW选择行为为qabstractemview.SelectRows 问题是,当我将函数连接到itemClicked()信号时,仅当我在posts和Views列中选择一个单元格时,信号才会触发,但当我单击主题name单元格时,信号不会触发。我

我正在编写一个论坛帖子数据库的接口

在上面的程序中,有一个工具箱小部件,其中包含两个主题浏览器处于活动状态的小部件。主题浏览器由一个垂直布局的父QFrame组成,该框架包含主题论坛类别标签、导航控制小部件和小部件主体(即
QTableWidget
(QTW))。QTW选择行为为
qabstractemview.SelectRows

问题是,当我将函数连接到
itemClicked()
信号时,仅当我在
posts
Views
列中选择一个单元格时,信号才会触发,但当我单击主题
name
单元格时,信号不会触发。我试过其他信号,他们也有同样的行为。需要注意的一点是,名称的第一个字符略微模糊。所以我想这可能是造成问题的原因

有什么建议吗

编辑

设置表的代码

   class ForumTopicWidget(QFrame):
    def __init__(self,db):
        QFrame.__init__(self)

        self._db=db
        self._rowcount = 21
        self._current_page = 1
        self._forum_id = None
        self._category_id = None

        self._navigation_widget = NavigationHeadWidget()
        self._layout = QVBoxLayout()
        self._title_label = QLabel()
        self._title_label.setText("<b>Topics</b>")
        self._title_label.setAlignment(Qt.AlignCenter)
        self._layout.addWidget(self._title_label)
        self._layout.addWidget(self._navigation_widget)
        self._topic_list = QTableWidget()
        #self._topic_list.setMinimumWidth(600)
        self._topic_list.setRowCount(self._rowcount)
        self._topic_list.setColumnCount(3)
        self._topic_list.setHorizontalHeaderLabels(["Name","Posts", "Views"])
        self._topic_list.horizontalHeader().setResizeMode(0,QHeaderView.Stretch)
        self._topic_list.verticalHeader().setVisible(False)
        #self._topic_list.setColumnWidth(0,476)
        self._topic_list.setColumnWidth(1,61)
        self._topic_list.setColumnWidth(2,61)
        self._topic_list.setSelectionBehavior(QAbstractItemView.SelectRows)
        self._layout.addWidget(self._topic_list)
        self.setLayout(self._layout)
        self.setFrameStyle(QFrame.WinPanel)
        self._topic_list.cellClicked.connect(self.cell_clicked)
        self._navigation_widget.set_nav_functions(self._shift_first, 
                                                  self._shift_prev, 
                                                  self._shift_next, 
                                                  self._shift_last)
        self.page_ids = []

    def cell_clicked(self,item):
        self._prime_topic(self.page_ids[item])

    def set_item_click_function(self,function):
        self._prime_topic = function

    def set_initial_state(self, category_id, forum_name):
        self._category_id = category_id
        self._topic_count = self._db.get_topic_count(category_id)
        self._last_page = int(ceil(float(self._topic_count) / self._rowcount))
        self.shift_state(1) 
        self._title_label.setText("<b> %s Topics</b>" % forum_name)

    def shift_state(self, new_page):
        self._current_page = new_page
        self.populate_page(new_page)
        self._navigation_widget.set_pagination_string(self._current_page, 
                                                      self._last_page)
    def _shift_first(self):
        self.shift_state(1)
        self._current_page = 1

    def _shift_prev(self):
        if self._current_page != 1:
            self._current_page = self._current_page - 1
            self.shift_state(self._current_page)

    def _shift_next(self):
        if self._current_page != self._last_page:
            self._current_page = self._current_page + 1
            self.shift_state(self._current_page)

    def _shift_last(self):
        self.shift_state(self._last_page)

    def populate_page(self,page_number):
        pages = self._db.get_paginated_topics(self._category_id,page_number,self._rowcount);

        i=0
        self.page_ids[:]=[]
        for page in pages:
            self.page_ids.append(page.id)
            q = QLabel()
            q.setText('<font size ="3">%s</font>' % page.title)
            self._topic_list.setCellWidget(i,0, q)
            pc = QTableWidgetItem(str(page.post_count))
            vc = QTableWidgetItem(str(page.view_count))
            pc.setFlags(QtCore.Qt.ItemIsEnabled)
            #pc.setFlags(QtCore.Qt.ItemIsEnabled)
            self._topic_list.setItem(i,1, pc)
            self._topic_list.setItem(i,2, vc)
            i = i +1
class-ForumTopicWidget(QFrame):
定义初始化(自我,数据库):
QFrame.\uuuuu初始化\uuuuuu(自)
自。_db=db
自。_行数=21
self.\u当前页面=1
self.\u论坛\u id=None
self.\u category\u id=None
self.\u navigation\u widget=NavigationHeadWidget()
self.\u layout=QVBoxLayout()
self.\u title\u label=QLabel()
self.\u title\u label.setText(“主题”)
self.\u title\u label.setAlignment(Qt.AlignCenter)
self.\u layout.addWidget(self.\u title\u标签)
self.\u layout.addWidget(self.\u导航\u小部件)
self.\u topic\u list=QTableWidget()
#自我主题列表。设置最小宽度(600)
self.\u topic\u list.setRowCount(self.\u rowcount)
self.\u topic\u list.setColumnCount(3)
self.\u topic\u list.setHorizontalHeaderLabels([“名称”、“帖子”、“视图”])
self.\u topic\u list.horizontalHeader().setResizeMode(0,QHeaderView.Stretch)
self.\u topic\u list.verticalHeader().setVisible(False)
#self.\u topic\u list.setColumnWidth(0476)
self._topic_list.setColumnWidth(1,61)
self._topic_list.setColumnWidth(2,61)
self.\u topic\u list.setSelectionBehavior(QAbstractItemView.SelectRows)
self.\u layout.addWidget(self.\u主题\u列表)
self.setLayout(self.\u布局)
self.setFrameStyle(QFrame.WinPanel)
self.\u topic\u list.cellClicked.connect(self.cell\u clicked)
self.\u导航\u小部件。设置导航功能(self.\u shift\u优先,
自身.\u shift\u prev,
self.\u shift\u下一步,
自我。_班次(最后一班)
self.page_id=[]
已单击def单元(自身,项目):
self.\u prime\u主题(self.page\u id[项目])
def设置项目点击功能(自身,功能):
self.\u prime\u topic=函数
def设置初始状态(自身、类别id、论坛名称):
self.\u category\u id=category\u id
self.\u topic\u count=self.\u db.get\u topic\u count(类别id)
self.\u last\u page=int(ceil(浮动(self.\u主题\u计数)/self.\u行计数))
自换档状态(1)
self.\u title\u label.setText(“%s主题”%forum\u name)
def shift_状态(自身,新页面):
self.\u当前页面=新页面
自我填充页面(新页面)
self.\u导航\u小部件。设置分页\u字符串(self.\u当前\u页面,
自我(最后一页)
def _先换档(自):
自换档状态(1)
self.\u当前页面=1
def\U shift\U prev(自):
如果是自己的话。_当前_页面!=1:
self.\u当前页面=self.\u当前页面-1
self.shift\u状态(self.\u当前页面)
def_shift_next(自):
如果是自己的话。_当前_页面!=self.\u最后一页:
self.\u当前页面=self.\u当前页面+1
self.shift\u状态(self.\u当前页面)
def_shift_last(自):
self.shift\u状态(self.\u最后一页)
def填充页面(自身,页面编号):
pages=self.\u db.获取分页主题(self.\u类别\u id、页码、self.\u行数);
i=0
self.page_id[:]=[]
对于页面中的页面:
self.page\u id.append(page.id)
q=QLabel()
q、 setText(“%s”%page.title)
self.\u topic\u list.setCellWidget(i,0,q)
pc=QTableWidgetItem(str(第页后计数))
vc=QTableWidgetItem(str(页面视图计数))
pc.setFlags(QtCore.Qt.ItemIsEnabled)
#pc.setFlags(QtCore.Qt.ItemIsEnabled)
self.\u topic\u list.setItem(i、1、pc)
self.\u topic\u list.setItem(i、2、vc)
i=i+1
这个问题出现在OS X和Linux上。

freenode上irc频道#qt的Sqwishy指出了我的错误

第一列包含
QLabel
,而不是标准文本。Qlabel有自己的信号。第二列是表管理信号的类型。我之所以使用标签而不是
QTableWidgetItem
,是因为我想调整字体大小,并认为这是唯一的方法

“填充页面”方法应如下所示:

   def populate_page(self,page_number):
        pages =\ 
        self._db.get_paginated_topics(self._category_id,page_number,self._rowcount);

        i=0
        self.page_ids[:]=[]
        for page in pages:
            self.page_ids.append(page.id)
            nc = QTableWidgetItem(str(page.title))
            pc = QTableWidgetItem(str(page.post_count))
            vc = QTableWidgetItem(str(page.view_count))
            self._topic_list.setItem(i,0,nc)
            self._topic_list.setItem(i,1, pc)
            self._topic_list.setItem(i,2, vc)
            i = i +1
freenode上irc频道#qt的Sqwishy指出了我的错误

第一列包含
QLabel
,而不是标准文本。Qlabel有自己的信号。第二列是表管理信号的类型。我之所以使用标签而不是
QTableWidgetItem
,是因为我想调整字体大小,并认为这是唯一的方法

“填充页面”方法应如下所示:

   def populate_page(self,page_number):
        pages =\ 
        self._db.get_paginated_topics(self._category_id,page_number,self._rowcount);

        i=0
        self.page_ids[:]=[]
        for page in pages:
            self.page_ids.append(page.id)
            nc = QTableWidgetItem(str(page.title))
            pc = QTableWidgetItem(str(page.post_count))
            vc = QTableWidgetItem(str(page.view_count))
            self._topic_list.setItem(i,0,nc)
            self._topic_list.setItem(i,1, pc)
            self._topic_list.setItem(i,2, vc)
            i = i +1