GVKun编程网logo

从Pandas数据框中填充QTableView的最快方法(pandas 填充)

21

以上就是给各位分享从Pandas数据框中填充QTableView的最快方法,其中也会对pandas填充进行解释,同时本文还将给你拓展android–从ExpandableListView的getChi

以上就是给各位分享从Pandas数据框中填充QTableView的最快方法,其中也会对pandas 填充进行解释,同时本文还将给你拓展android – 从ExpandableListView的getChildView()访问groupview的TextView、c – Qt – 清除QTableView的内容、Expandable TableView Animation、ExpandableTableView UITableView 的子类等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

从Pandas数据框中填充QTableView的最快方法(pandas 填充)

从Pandas数据框中填充QTableView的最快方法(pandas 填充)

我是PyQt的新手,正在努力填充QTableView控件。

我的代码如下:

def data_frame_to_ui(self, data_frame):        """        Displays a pandas data frame into the GUI        """        list_model = QtGui.QStandardItemModel()        i = 0        for val in data_frame.columns:            # for the list model            if i > 0:                item = QtGui.QStandardItem(val)                #item.setCheckable(True)                item.setEditable(False)                list_model.appendRow(item)            i += 1        self.ui.profilesListView.setModel(list_model)        # for the table model        table_model = QtGui.QStandardItemModel()        # set table headers        table_model.setColumnCount(data_frame.columns.size)        table_model.setHorizontalHeaderLabels(data_frame.columns.tolist())        self.ui.profileTableView.horizontalHeader().setStretchLastSection(True)        # fill table model data        for row_idx in range(10): #len(data_frame.values)            row = list()            for col_idx in range(data_frame.columns.size):                val = QtGui.QStandardItem(str(data_frame.values[row_idx][col_idx]))                row.append(val)            table_model.appendRow(row)        # set table model to table object        self.ui.profileTableView.setModel(table_model)

实际上,在代码中,我成功地填充了QListView,但是未显示我设置为QTableView的值,您还可以看到我将行截断为10,因为它永远需要显示数据帧的数百行。

那么,从熊猫数据框中填充表模型的最快方法是什么?

提前致谢。

答案1

小编典典

就我个人而言,我将创建自己的模型类以使其处理起来更加容易。

例如:

import sysfrom PyQt4 import QtCore, QtGuiQt = QtCore.Qtclass PandasModel(QtCore.QAbstractTableModel):    def __init__(self, data, parent=None):        QtCore.QAbstractTableModel.__init__(self, parent)        self._data = data    def rowCount(self, parent=None):        return len(self._data.values)    def columnCount(self, parent=None):        return self._data.columns.size    def data(self, index, role=Qt.DisplayRole):        if index.isValid():            if role == Qt.DisplayRole:                return QtCore.QVariant(str(                    self._data.values[index.row()][index.column()]))        return QtCore.QVariant()if __name__ == ''__main__'':    application = QtGui.QApplication(sys.argv)    view = QtGui.QTableView()    model = PandasModel(your_pandas_data)    view.setModel(model)    view.show()    sys.exit(application.exec_())

android – 从ExpandableListView的getChildView()访问groupview的TextView

android – 从ExpandableListView的getChildView()访问groupview的TextView

我正在尝试访问GroupView的textview,它显示ChildView中所选复选框的计数.

enter image description here

例如 – north是GroupView,下面带有复选框的列表是ChildView.我想每次点击复选框更新计数(18).我在复选框上应用了OnClickListner.我有自定义ExpanadableListViewAdapter扩展Baseexpandablelistadapter.

这是我的代码片段 –

@Override
public View getGroupView(int groupPosition,boolean isExpanded,View convertView,ViewGroup parent) {
    if (convertView == null) {
        convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.filter_expandable_list_group,parent,false);

        groupViewHolder = new GroupViewHolder();

        groupViewHolder.GroupName = (TextView) convertView.findViewById(R.id.group_name);
        groupViewHolder.GroupCount = (TextView) convertView.findViewById(R.id.group_count);
        groupViewHolder.rightArrow = (ImageView) convertView.findViewById(R.id.right_arrow);

        convertView.setTag(groupViewHolder);
    }else{
        groupViewHolder = (GroupViewHolder) convertView.getTag();
    }
    groupViewHolder.GroupName.setText(((OutletListData) getGroup(groupPosition)).getName());
    groupViewHolder.GroupCount.setText(""+((OutletListData) getGroup(groupPosition)).getoutletDatas().size());

    return convertView;
}

@Override
public View getChildView(final int groupPosition,final int childPosition,boolean isLastChild,final ViewGroup parent) {
    if (convertView == null) {
        convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.filter_expandable_list_child,false);

        childViewHolder = new ChildViewHolder();

        childViewHolder.childTextView = (TextView) convertView.findViewById(R.id.text1);
        childViewHolder.childCheckBox = (CheckBox) convertView.findViewById(R.id.checkBox);

        convertView.setTag(childViewHolder);
    }else{
        childViewHolder = (ChildViewHolder) convertView.getTag();
    }

    childViewHolder.childTextView.setText(((OutletData) getChild(groupPosition,childPosition)).getDealerName());
    childViewHolder.childCheckBox.setChecked(((OutletData) getChild(groupPosition,childPosition)).getSelected() == "1");
    childViewHolder.childCheckBox.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean isChecked = ((CheckBox) v).isChecked();
            ApplicationController.getEventBus().post(((OutletData) getChild(groupPosition,childPosition)).getoutletID());
            if (isChecked) {
                ((OutletData) getChild(groupPosition,childPosition)).setSelected("1");
            } else {
                ((OutletData) getChild(groupPosition,childPosition)).setSelected("0");
            }
        }
    });
    return convertView;
}
最佳答案
首先,以简单列表视图为例,而不是可扩展列表视图. ListView是容纳一堆Items的容器.
每个项目都有子视图,这些视图由构成ListView中一行的各个元素组成.即不同的文本视图等.
适配器的getView()对数据集进行操作,然后在列表中创建项目.因此,如果更改用于创建适配器的数据集,并调用notifyDatasetChanged(),则会更新列表视图.

现在在你的情况下,
您可能正在使用ArrayList来表示像“norTH”这样的对象.因此,如果将count值存储在此对象中,则计数的更新将很容易.
只需使用groupPosition访问列表中的数据并进行更新即可.并调用notifyDatasetChanged.

假设您使用了mList类型的ArrayList来创建适配器

// ArrayListNow mList is data set for this adapter

所以在getChildView()中你写道:

@Override
    public void onClick(View v) {
        boolean isChecked = ((CheckBox) v).isChecked();
        ApplicationController.getEventBus().post(((OutletData) getChild(groupPosition,childPosition)).getoutletID());
        if (isChecked) {
            // your code 
            int count = ((OutletListData) getGroup(groupPosition)).getCount();
            count++;
            ((OutletListData) getGroup(groupPosition)).setCount(count);
            notifyDataSetChanged();
        } else {
            // your code;
            int count = ((OutletListData) getGroup(groupPosition)).getCount();
            count--;
            ((OutletListData) getGroup(groupPosition)).setCount(count);
            notifyDataSetChanged();

        }
    }

现在,这种方法的唯一限制是count应该是Object的一部分.因此,如果您是第一次从其他地方初始化计数而不是从Object本身,我建议您将计数存储在Object本身,并从那里初始化textView的值.
所以在getGroupView()中

groupViewHolder.GroupCount.setText(""+((OutletListData) getGroup(groupPosition)).getCount());

c – Qt – 清除QTableView的内容

c – Qt – 清除QTableView的内容

我在Qt 4.7中工作,并且有一个对话框,其中包含QTableView和QButton(以及其他不相关的内容).单击QButton时,它必须清除QTableView中的所有数据.我不确定如何使用它.我在网上看了一会儿,但没有找到任何有用的东西.根据我发现的 here,我试过这个:

void MyClass :: on_myButton_clicked()
{
myTableView->模型() – >清除();
}

但是,这会产生以下错误:

error: C2039: 'clear' : is not a member of 'qabstractitemmodel'

有没有其他方法可以做到这一点,我不小心忽略了?谢谢!

解决方法

函数myTableView-> model()返回一个不包含clear()方法的qabstractitemmodel.您应该调用模型的清晰方法.如果你有一个像这样的模型:
QStandardItemmodel * model= new QStandardItemmodel( 2,4 );

调用clear应删除模型中删除视图的所有数据,因为它是为了显示相关模型中的数据而提供的:

model->clear();

Expandable TableView Animation

Expandable TableView Animation

Expandable TableView Animation 介绍

点击列表某一行(cell),被点击的列表行下拉展开,新展开的视图(demo中是新的列表)和当前被点击的列表行重新组成一个新的视图。换句话说,就是从主视图的列表到列表某一行的细节视图的一种平滑跳转动画。
代码使用方式:

step 1: copy OZLExpandableTableView.h && OZLExpandableTableView.m to your
project
step 2: #import “OZLExpandableTableView.h” in your master view
step 3: in your master view, add code [self expandFromCell: toViewController:]
when you trigger the detail view

for example:

-(void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath
{
OZLDetailViewController *detailview = [[OZLDetailViewController alloc] init];
detailview.titleStr = [_data objectAtIndex:indexPath.row];
[self expandFromCell:[tableView cellForRowAtIndexPath:indexPath]
toViewController:detailview];
}

step 4: add code below in your master view

-(void) viewWillAppear:(BOOL)animated
{
[self restoreFromExpandedCell];
}

Expandable TableView Animation 官网

https://github.com/zhijie/ExpandableTableView

ExpandableTableView UITableView 的子类

ExpandableTableView UITableView 的子类

ExpandableTableView 介绍

ExpandableTableView 是 UITableView 的子类,可以扩展标题。

示例:

ExpandableTableView 官网

https://github.com/rondinellimorais/ExpandableTableView

今天的关于从Pandas数据框中填充QTableView的最快方法pandas 填充的分享已经结束,谢谢您的关注,如果想了解更多关于android – 从ExpandableListView的getChildView()访问groupview的TextView、c – Qt – 清除QTableView的内容、Expandable TableView Animation、ExpandableTableView UITableView 的子类的相关知识,请在本站进行查询。

本文标签: