gpt4 book ai didi

python - QT4 (PyQt4) QTableWidget 信号在应该触发时没有触发

转载 作者:太空宇宙 更新时间:2023-11-03 19:14:41 25 4
gpt4 key购买 nike

Program

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

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

问题是,当我将函数连接到 itemClicked() 信号时,只有当我在 postsViews< 中选择一个单元格时,该信号才会触发 列,但当我单击主题 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

该问题出现在 OS X 和 Linux 上。

最佳答案

freenode 上 irc channel #qt 的 Sqwishy 指出了我的错误。

第一列包含QLabel的文本,而不是标准文本。 QLabels 有自己的信号。后两列是表管理信号的类型。我使用 Label 而不是 QTableWidgetItem 的原因是因为我想调整字体大小,并且感觉这是唯一的方法。

populate_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)
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

关于python - QT4 (PyQt4) QTableWidget 信号在应该触发时没有触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11783073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com