以上就是给各位分享从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 填充)
- android – 从ExpandableListView的getChildView()访问groupview的TextView
- c – Qt – 清除QTableView的内容
- Expandable TableView Animation
- ExpandableTableView UITableView 的子类
从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
我正在尝试访问GroupView的textview,它显示ChildView中所选复选框的计数.
例如 – 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中一行的各个元素组成.即不同的文本视图等.
适配器的getView()对数据集进行操作,然后在列表中创建项目.因此,如果更改用于创建适配器的数据集,并调用notifyDatasetChanged(),则会更新列表视图.
现在在你的情况下,
您可能正在使用ArrayList来表示像“norTH”这样的对象.因此,如果将count值存储在此对象中,则计数的更新将很容易.
只需使用groupPosition访问列表中的数据并进行更新即可.并调用notifyDatasetChanged.
假设您使用了mList类型的ArrayList来创建适配器
// ArrayList
所以在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的内容
void MyClass :: on_myButton_clicked()
{
myTableView->模型() – >清除();
}
但是,这会产生以下错误:
error: C2039: 'clear' : is not a member of 'qabstractitemmodel'
有没有其他方法可以做到这一点,我不小心忽略了?谢谢!
解决方法
QStandardItemmodel * model= new QStandardItemmodel( 2,4 );
调用clear应删除模型中删除视图的所有数据,因为它是为了显示相关模型中的数据而提供的:
model->clear();
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 介绍
ExpandableTableView 是 UITableView 的子类,可以扩展标题。
示例:
ExpandableTableView 官网
https://github.com/rondinellimorais/ExpandableTableView
今天的关于从Pandas数据框中填充QTableView的最快方法和pandas 填充的分享已经结束,谢谢您的关注,如果想了解更多关于android – 从ExpandableListView的getChildView()访问groupview的TextView、c – Qt – 清除QTableView的内容、Expandable TableView Animation、ExpandableTableView UITableView 的子类的相关知识,请在本站进行查询。
本文标签: