使用文件属性填充 PyQt 中的表 [英] Populating a table in PyQt with file attributes

查看:57
本文介绍了使用文件属性填充 PyQt 中的表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用在脚本其他地方打开的文件的属性填充 QTableWidget.我已经使用以下代码成功设置了从文件中读取的文件属性:

I'm trying to populate a QTableWidget with the attributes of a file opened elsewhere in the script. I've successfully set the file attributes read in from the file using the following code:

class FileHeader(object):

fileheader_fields=(
    "filetype","fileversion","numframes",
    "framerate","resolution","numbeams",
    "samplerate","samplesperchannel","receivergain",
    "windowstart","winlengthsindex","reverse",
    "serialnumber","date","idstring","ID1","ID2",
    "ID3","ID4","framestart","frameend","timelapse",
    "recordInterval","radioseconds","frameinterval","userassigned")

fileheader_formats=(
    'S3','B','i4','i4','i4','i4','f','i4','i4','i4',
    'i4','i4','i4','S32','S256','i4','i4','i4','i4',
    'i4','i4','i4','i4','i4','i4','S136')

IMAGE_HEADER_BYTES = 256
IMAGES_DATA_BYTES = 49152

def __init__(self,filename=''):
    self.filename = filename

    if filename:
        self.setFile(filename)
    else:
        # initialize our attributes to None
        for field in self.fileheader_fields:
            setattr(self,field,None) 
    def setFile(self, f):
    self.infile=open(f, 'rb')
    dtype=dict(names=self.fileheader_fields, formats=self.fileheader_formats)
    self.fileheader=np.fromfile(self.infile, dtype=dtype, count=1)
    self.fileheader_length=self.infile.tell()

    for field in self.fileheader_fields:
        setattr(self,field,self.fileheader[field])        

我已使用此代码填充表格,但我不断收到FileHeader has no attribute fileheader"错误.

I've used this code to populate the table but I keep getting a "FileHeader has no attribute fileheader" error.

from fileheader import FileHeader, Frame
from echogram import QEchogram
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import os, sys


class MainWindow(QWidget):

    def __init__(self, parent=None):
        self.fileheader_fields=FileHeader.fileheader_fields
        self.fileheader_values=FileHeader.fileheader[field]
        self.fileheader={field: "value of" + field
                         for field in self.fileheader_fields}
        super(MainWindow, self).__init__(parent)
        self.fileheader_table=QTableWidget()
        layout=QVBoxLayout()
        layout.addWidget(self.fileheader_table)
        self.setLayout(layout)
        self.populate

    def populate(self):
        self.fileheader_table.setRowCount(len(self.fileheader_fields))
        self.fileheader_table.sestColumnCount(2)
        self.fileheader_table.setHorizontalHeaderLabels(['name','value'])
        for i,field in enumerate(self.fileheader_fields):
            name=QTableWidgetItem(field)
            value=QTableWidgetItem(self.fileheader[field])
            self.fileheader_table.setItem(i,0,name)
            self.fileheader_table.setItem(i,1,value)

    if __name__=="__main__":
        app=QApplication(sys.argv)
        filename=str(QFileDialog.getOpenFileName(None,"open  file","C:/vprice/DIDSON/DIDSON  Data","*.ddf"))
        wnd=MainWindow()
        wnd.resize(640,480)
        wnd.show()
        #echoGram=QEchogram()
        #echoGram.initFromFile(filename)
        #fileName="test.png"
        #echoGram.processEchogram()
        #dataH=echoGram.data
        #print "Horizontal data", dataH

请耐心等待——大约一个月前,我刚刚开始学习 Python 的所有内容......

Bear with me-- I just started with all of the Python stuff about a month ago...

推荐答案

参见 populate 方法.文档

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui


class MainWindow(QtGui.QWidget):

    def __init__(self, parent=None):

        self.fileheader_fields=(
            "filetype","fileversion","numframes",
            "framerate","resolution","numbeams",
            "samplerate","samplesperchannel","receivergain",
            "windowstart","winlengthsindex","reverse",
            "serialnumber","date","idstring","ID1","ID2",
            "ID3","ID4","framestart","frameend","timelapse",
            "recordInterval","radioseconds","frameinterval","userassigned"
        )
        # just for test
        self.fileheader = {field: 'value of ' + field 
                           for field in self.fileheader_fields}
        super(MainWindow, self).__init__(parent)
        self.table_widget = QtGui.QTableWidget()
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.table_widget)
        self.setLayout(layout)
        self.populate()

    def populate(self):
        self.table_widget.setRowCount(len(self.fileheader_fields))
        self.table_widget.setColumnCount(2)
        self.table_widget.setHorizontalHeaderLabels(['name', 'value'])
        for i, field in enumerate(self.fileheader_fields):
            name = QtGui.QTableWidgetItem(field)
            value = QtGui.QTableWidgetItem(self.fileheader[field])
            self.table_widget.setItem(i, 0, name)
            self.table_widget.setItem(i, 1, value)


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    wnd = MainWindow()
    wnd.resize(640, 480)
    wnd.show()
    sys.exit(app.exec_())

UPD

具体案例的代码:

from fileheader import FileHeader, Frame
from echogram import QEchogram
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import os, sys


class MainWindow(QWidget):

    def __init__(self, filename, parent=None):
        super(MainWindow, self).__init__(parent)
        # here we are loading file
        # now self.fileheader contains attributes
        self.fileheader = FileHeader(filename)
        self.fileheader_table = QTableWidget()
        layout = QVBoxLayout()
        layout.addWidget(self.fileheader_table)
        self.setLayout(layout)
        self.populate()

    def populate(self):
        self.fileheader_table.setRowCount(len(self.fileheader.fileheader_fields))
        self.fileheader_table.sestColumnCount(2)
        self.fileheader_table.setHorizontalHeaderLabels(['name','value'])
        for i,field in enumerate(self.fileheader.fileheader_fields):
            name=QTableWidgetItem(field)
            value=QTableWidgetItem(getattr(self.fileheader, field))
            self.fileheader_table.setItem(i,0,name)
            self.fileheader_table.setItem(i,1,value)

    if __name__=="__main__":
        app=QApplication(sys.argv)
        filename=str(QFileDialog.getOpenFileName(None,"open  file","C:/vprice/DIDSON/DIDSON  Data","*.ddf"))
        wnd=MainWindow(filename)
        wnd.resize(640,480)
        wnd.show()
        #echoGram=QEchogram()
        #echoGram.initFromFile(filename)
        #fileName="test.png"
        #echoGram.processEchogram()
        #dataH=echoGram.data
        #print "Horizontal data", dataH

这篇关于使用文件属性填充 PyQt 中的表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆