我想在PyQt表中显示一个pandas数据帧.我已经取得了一些进展,但是无法正确派生Table Model类.任何有关这方面的帮助将非常感激.
**注意这里的完整示例代码**
我正在努力生成一个有效的QtCore.QAbstractTableModel派生类.继上一个关于QItemDelegates的问题后,我试图从Pandas DataFrame生成一个表模型来插入实际数据.我在这里有一些示例代码,但如果我在Widget类(ln 152)中用TableModel2替换我的TableModel,我就无法显示该表.
class TableModel2(QtCore.QAbstractTableModel):
def __init__(self, parent=None, *args):
super(TableModel2, self).__init__()
#QtCore.QAbstractTableModel.__init__(self, parent, *args)
self.datatable = None
self.headerdata = None
self.dataFrame = None
self.model = QtGui.QStandardItemModel(self)
def update(self, dataIn):
print 'Updating Model'
self.datatable = dataIn
print 'Datatable : {0}'.format(self.datatable)
headers = dataIn.columns.values
header_items = [
str(field)
for field in headers
]
self.headerdata = header_items
print 'Headers'
print self.headerdata
for i in range(len(dataIn.index.values)):
for j in range(len(dataIn.columns.values)):
#self.datatable.setItem(i,j,QtGui.QTableWidgetItem(str(df.iget_value(i, j))))
self.model.setItem(i,j,QtGui.QStandardItem(str(dataIn.iget_value(i, j))))
def rowCount(self, parent=QtCore.QModelIndex()): …Run Code Online (Sandbox Code Playgroud) 我正在从Pandas数据帧动态创建QTableView.我这里有示例代码.
我可以使用复选框创建表格,但是我无法获得反映模型数据的复选框,甚至根本无法更改为取消选中.
我正在关注上一个问题的示例代码,并以@raorao答案为指导.这将显示表格中的框,但不起作用.
任何人都可以建议任何更改,或者此代码有什么问题.为什么它不反映模型,为什么它不会改变?
请查看我的完整示例代码.
编辑一:Frodon评论后更新:更正了字符串强制转换为bool并进行比较xxx =='True'
class CheckBoxDelegate(QtGui.QStyledItemDelegate):
"""
A delegate that places a fully functioning QCheckBox in every
cell of the column to which it's applied
"""
def __init__(self, parent):
QtGui.QItemDelegate.__init__(self, parent)
def createEditor(self, parent, option, index):
'''
Important, otherwise an editor is created if the user clicks in this cell.
** Need to hook up a signal to the model
'''
return None
def paint(self, painter, option, index):
'''
Paint …Run Code Online (Sandbox Code Playgroud) 我在排序元组列表时遇到了困难.我想按列表中的字符串长度排序.
例如:
l = [(99,'bbc', 121),(33,'abcd', 231),(44,'zb', 148), (23,'abcde',221)]
Run Code Online (Sandbox Code Playgroud)
如果我按元素1排序:
l.sort(key=itemgetter(1), reverse=True)
Run Code Online (Sandbox Code Playgroud)
这将按字母顺序排列字符串,而不是长度.我更喜欢就地排序和反向排序,首先使用最长的字符串.
我可以使用lambda和cmp,
l.sort(lambda x,y: cmp(len(x[1]), len(y[1])), reverse=True)
Run Code Online (Sandbox Code Playgroud)
但使用键和/或项目符号是否有更优雅或pythonic的方式?
我试图在我的表中显示一个组合框,以便我可以从表模型中设置所选索引,就像表中的其他单元格一样.我已经从其他示例拼凑了这些,但仍然无法理解交互如何工作来设置QComboBox的选定索引.
这是我能用来证明问题的最简单的例子.如果有人能演示如何从模型数据中自动设置索引?另外如何使用'currentIndexChanged'信号,因为这似乎在重新绘制时几乎连续不断?谢谢.
# The following tells SIP (the system that binds Qt's C++ to Python)
# to return Python native types rather than QString and QVariant
import sip
sip.setapi('QString', 2)
sip.setapi('QVariant', 2)
from PyQt4 import QtCore, QtGui
class TableModel(QtCore.QAbstractTableModel):
"""
A simple 5x4 table model to demonstrate the delegates
"""
def rowCount(self, parent=QtCore.QModelIndex()): return 5
def columnCount(self, parent=QtCore.QModelIndex()): return 4
def data(self, index, role=QtCore.Qt.DisplayRole):
if not index.isValid(): return None
if not role==QtCore.Qt.DisplayRole: return None
return "{0:02d}".format(index.row())
class ComboDelegate(QtGui.QItemDelegate):
"""
A …Run Code Online (Sandbox Code Playgroud) 我有兴趣使用Linq将数组乘以一个因子.
我目前的代码是:
public static double[] multiply(double[] x, double factor)
{
if (x == null) throw new ArgumentNullException();
double[] result = new double[x.Length];
for (int i = 0; i < x.Length; i++)
{
result[i] = x[i] * factor;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
在Linq中执行此操作的最有效方法是什么,它会提供更好的性能吗?
我希望通过C#获得Bloomberg .Net API 3的实时价格快照.
我可以从样本中看到如何获取历史价格或订阅数据,但我找不到获得订单快照的正确请求,即买/卖/最后交易价格和数量.
对于盘中蜱我会做这样的事情:
Service refDataService = d_session.GetService("//blp/refdata");
// create intraday tick request
Request request = refDataService.CreateRequest("IntradayTickRequest");
// set request parameters
request.Set("includeConditionCodes", checkBoxIncludeConditionCode.Checked);
request.Set("includeExchangeCodes", checkBoxIncludeExchangeCode.Checked);
Element eventTypes = request.GetElement("eventTypes");
eventTypes.AppendValue("TRADE");
eventTypes.AppendValue("BID");
eventTypes.AppendValue("ASK");
request.Set("security", d_requestSecurity);
request.Set("startDateTime", new BDateTime(startDate.Year, startDate.Month,
startDate.Day,startDate.Hour, startDate.Minute, startDate.Second, 0));
request.Set("endDateTime", new BDateTime(endDate.Year, endDate.Month, endDate.Day,
endDate.Hour, endDate.Minute, endDate.Second, 0));
Run Code Online (Sandbox Code Playgroud)
是否有不同的实时快照请求?
我们正在考虑将单元测试添加到我们的C#代码库中.我发现将单元测试添加到简单类很容易,但与其他依赖项交互的类更难.我一直在研究模拟框架,但是想知道最好的方法是首先编写类来打破外部依赖,比如文件系统,数据库和消息系统依赖.
举一个例子,例程在套接字上侦听某种格式的消息 - 比如MessageA.这被解码,一些计算完成,这被重新编码成不同的二进制格式,然后发送结果消息,MessageB.
我目前的测试方法如下.我为所有套接字交互提取一个接口,并创建一个模拟接口.我将接口设置为单例.然后针对硬编码输入运行该类.被测试的类将使用单例中的接口来发送/接收.
我做了类似的事情来测试数据库交互.
这似乎不是最灵活的方法,你会如何改进它以使其更容易测试?如果一个模拟框架是答案,我将如何设计类?
示例代码:
[SetUp]
public void init()
{
// set message interface in singleton as mock interface
CommAdapter.Instance.MessageAdapter = new MockMessage();
// build reference message from hard coded test variables
initialiseMessageA();
// set input from mock message socket
((MockMessage) CommAdapter.Instance.MessageAdapter).MessageIn = m_messageA;
}
[Test]
public void test_listenMessage_validOutput()
{
// initialise test class
MessageSocket tS = new MessageSocket();
// read from socket
tS.listenMessage();
// extract mock interface from singleton
MockMessage mm = ((MockMessage) CommAdapter.Instance.MessageAdapter);
// assert …Run Code Online (Sandbox Code Playgroud)