标签: qtableview

如何在PyQt中为QTableView的每个单元格添加一个右键菜单

我想添加一个右键菜单来删除,重命名或打开QTAbleView单元格中每个单元格中的图像,我试过,发现每个人都试图将菜单添加到tableview中的标题,我试过下面但是看起来似乎不在下面的代码中工作..

class GalleryUi(QtGui.QTableView):
    """ Class contains the methods that forms the
        UI of Image galery
    """
    def __init__(self, imagesPathLst=None, parent=None):
        super(GalleryUi, self).__init__(parent)
        self.__sw = QtGui.QDesktopWidget().screenGeometry(self).width()
        self.__sh = QtGui.QDesktopWidget().screenGeometry(self).height()
        self.__animRate = 1200
        self._imagesPathLst = imagesPathLst
        self._thumb_width = 200
        self._thumb_height = self._thumb_width + 20
        self.setUpWindow(initiate=True)

        self._startControlBar()

        self._connections()

    def contextMenuEvent(self, event):

        index = self.indexAt(event.pos())
        menu = QtGui.QMenu()
        renameAction = QtGui.QAction('Exit', self)
        renameAction.triggered.connect(self.close)
        self.menu.addAction(renameAction)
        self.menu.popup(QtGui.QCursor.pos())

    def closeEvent(self,event):
        # in case gallery is launched by Slideshow this is not needed
        if hasattr(self, 'bar'):
            self.bar.close()

    def …
Run Code Online (Sandbox Code Playgroud)

contextmenu pyqt qtableview qtablewidgetitem python-2.7

12
推荐指数
2
解决办法
2万
查看次数

如何使用PyQt5显示Pandas数据帧

我有一个问题,下面的行self.tableView.set??????????(df)应该在PyQt5中显示数据帧.我放 ???那里我错过了我需要的代码.

def btn_clk(self):
        path = self.lineEdit.text()
        df = pd.read_csv(path)
        self.tableView.set??????????(df)
Run Code Online (Sandbox Code Playgroud)

其余的代码可以工作,因为如果我print(df)在上面的代码中使用,数据框就会在IPython控制台中打印出来.所以,Pandas读取CSV并打印出来.

但是,我尝试了很多东西让它在PyQt5中显示出来并且没有任何效果.我对PyQt不太熟悉,刚刚开始玩它而且我被困在这里.

这是我的代码:

from PyQt5 import QtCore, QtGui, QtWidgets
import pandas as pd
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(662, 512)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.tableView = QtWidgets.QTableView(self.centralwidget)
        self.tableView.setObjectName("tableView")
        self.verticalLayout.addWidget(self.tableView)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
        self.horizontalLayout.addLayout(self.verticalLayout)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 662, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow) …
Run Code Online (Sandbox Code Playgroud)

python pyqt qtableview pandas pyqt5

12
推荐指数
1
解决办法
1万
查看次数

QTableView - 不允许用户编辑单元格

我用QSqlTableModel创建了一个QTableView.按标准,双击单元格将标记它们,用户可以编辑它们.我想,不允许用户这样做.允许他通过单击单个单元格来标记整行,但不能编辑单元格.我怎样才能做到这一点?

c++ qt qt4 qtableview

11
推荐指数
2
解决办法
2万
查看次数

QTableView:如何正确创建QModelIndex?

我正试图在特定单元格上进入编辑模式,如下所示:

void MainWindow::on_addButton_released() {
    tm->addRow();
    tableView->scrollToBottom();
    int ec=tm->firstWritableColumn();
    int r=tm->rowCount(QModelIndex());
    QModelIndex id = tm->index(r, ec, QModelIndex());
    tableView->setCurrentIndex(id);
    tableView->edit(id);
    qDebug() << "row:" << r << " col:" << ec << "index:" << id;
}
Run Code Online (Sandbox Code Playgroud)

我的模型创建了一个这样的索引:

QModelIndex TableModel::index(int row,int column,QModelIndex parent) const {
    Q_UNUSED(parent);
    return createIndex(row,column,0);
}
Run Code Online (Sandbox Code Playgroud)

调试输出如下所示:

row: 9  col: 1 index: QModelIndex(9,1,0x0,TableModel(0xbf3f50) )  
Run Code Online (Sandbox Code Playgroud)

我很确定索引在某种程度上是无效的,因为setCurrentIndex()它似乎不起作用.

qt qtableview qmodelindex

11
推荐指数
1
解决办法
2万
查看次数

QTableView非常慢(即使只有3000行)

我有一个3000行8列的表.我使用QTableView.要插入我做的项目:

QStandardItem* vSItem = new QStandardItem();
vSItem->setText("Blabla");
mModel->setItem(row, column, vSItem);
Run Code Online (Sandbox Code Playgroud)

其中mModel是QStandardItemModel.如果我没有很多行,一切都很好,但是当我想要显示大数据(大约3000行)时,它非常慢(在Win 7 64位上有20秒(8核的机器有8 GB RAM! !!)).我能做些什么来提高性能吗?

提前致谢.

qt qtableview

11
推荐指数
2
解决办法
2万
查看次数

在QTableView中显示动画图标的最佳方法是什么?

我一直在努力解决这个问题,我似乎无法找到正确的方法.

我想要的是能够使用动画图标作为我的一些项目的装饰(通常表明该特定项目正在进行一些处理).我有一个自定义表模型,我在一个显示QTableView.

我的第一个想法是创建一个自定义委托,负责显示动画.当传递a QMovie作为装饰角色时,代表将连接到QMovie每个新框架可用时更新显示(参见下面的代码).但是,在调用委托paint方法后,画家似乎仍然无效(调用画家save方法时出错,可能是因为指针不再指向有效内存).

另一种解决方案是dataChanged每当新帧可用时发出项目的信号,但1)会产生许多不必要的开销,因为数据没有真正改变; 2)在模型级别处理电影似乎并不干净:显示层(QTableView或代理人)应负责处理新帧的显示.

有没有人知道在Qt视图中显示动画的干净(并且最好是高效)方式?


对于那些感兴趣的人,这里是我开发的代表的代码(目前不起作用).

// Class that paints movie frames every time they change, using the painter
// and style options provided
class MoviePainter : public QObject
{
    Q_OBJECT

  public: // member functions
    MoviePainter( QMovie * movie, 
                  QPainter * painter, 
                  const QStyleOptionViewItem & option );

  public slots:
    void paint( ) const;

  private: // member variables
    QMovie               * movie_;
    QPainter             * painter_;
    QStyleOptionViewItem   option_; …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtableview qabstracttablemodel

10
推荐指数
2
解决办法
3802
查看次数

显示隐藏的QTableView列

我正在尝试做一些看起来应该非常简单的事情,但是我越是调查它,我想知道它是否是一个Qt错误.

所以,我有一个QTableView可以按用户喜欢显示/隐藏的列.在我初始化表之后,我调用了一个自定义restoreColumns()方法,该方法隐藏QTableView::hideColumn()了用户在上次打开GUI时隐藏的列(使用).

当用户尝试显示上次运行GUI时用户隐藏的列时,就会出现问题.调用适当的信号/插槽并运行但由于某种原因QTableView未更新以显示列.

奇怪的是,任何已经显示的列(上次运行GUI时用户都没有隐藏)都没有隐藏/显示的问题.

有什么想法吗?谢谢!


这是我如何初始化表...

m_tableModel = new mytablemodel();
m_tableView = new mytableview();
m_tableView->setItemDelegate(m_tableDelegate);
m_tableView->setModel(m_tableModel);
Run Code Online (Sandbox Code Playgroud)

restoreColumns()方法的肉:

for (int i=0; i<horizontalHeader()->count(); i++) {
    // load size to restore previous width
    ...
    horizontalHeader()->resizeSection(i, width); // restore width

    // load previous column position
    ...
    // restore column order
    int currentVisualIndex = horizontalHeader()->visualIndex(i);

    if (currentVisualIndex != visualIndex) 
        horizontalHeader()->moveSection(currentVisualIndex, visualIndex);

    // load previous hidden/shown state
    ...
    if (columnHidden) {
        hideColumn(i);
    } else {
        showColumn(i);
    }
} …
Run Code Online (Sandbox Code Playgroud)

qt qt4 qtableview

10
推荐指数
1
解决办法
3932
查看次数

如何在PyQt中为QTableView创建过滤器

我正在使用QTableView来显示从中检索的数据 QtSql.QSqlQuery

我想知道如何在excel中为它创建过滤器.

在此输入图像描述

在上面的图像中,我需要获取所有heders的过滤器(Sh_Code,SH_Seq,Stage)过滤器将具有我们可以过滤的那一列中的唯一值.

要求的结果

我需要Table视图标题,其中包含一个列表框,列出该列中的所有唯一值,就像下面的excel一样.无需Top,Standard过滤器......如图所示.只需要"全部"和独特的"列项"

在此输入图像描述

这是来自我的.NET应用程序,上传时更加清晰

在此输入图像描述

python qt pyqt qtableview pyqt4

10
推荐指数
2
解决办法
2万
查看次数

在QTableView中更改列的顺序

我想知道如何通过拖动改变QtableView中列的顺序?我目前有一个派生自FilterProxyModel的类作为QtableView的源代码.我使用的是QT 4.8

c++ qt qtableview

10
推荐指数
1
解决办法
4652
查看次数

如何使用HTML格式和可点击的单元格制作快速QTableView?

我正在制作一个字典程序,在3列子QTableView类中显示单词定义,当用户键入它们时,从QAbstractTableModel子类中获取数据.像这样的东西:

表和用户输入截图

我想在文本中添加各种格式,我用来在数据进入时向每个单元格QAbstractItemView::setIndexWidget添加一个QLabel:

WordView.h

#include <QTableView>

class QLabel;

class WordView : public QTableView {
    Q_OBJECT

public:
    explicit WordView(QWidget *parent = 0);

    void rowsInserted(const QModelIndex &parent, int start, int end);

private:
    void insertLabels(int row);
    void removeLabels(int row);
};
Run Code Online (Sandbox Code Playgroud)

WordView.cpp

#include <QLabel>
#include "WordView.h"

WordView::WordView(QWidget *parent) :
    QTableView(parent)
{}

void WordView::rowsInserted(const QModelIndex &parent, int start, int end) {
    QTableView::rowsInserted(parent, start, end);

    for (int row = start; row <= end; ++row) {
        insertLabels(row);
    }
}

void …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtableview qt5 qtstylesheets

10
推荐指数
2
解决办法
4007
查看次数