def __init__(self, *args):
super(MainWindow, self).__init__(*args)
QtCore.QCoreApplication.setOrganizationName("mbaser")
QtCore.QCoreApplication.setOrganizationDomain("foo.org")
QtCore.QCoreApplication.setApplicationVersion("0.0.1")
self.current_database = QtSql.QSqlDatabase.addDatabase('QSQLITE')
self.setupUi(self)
self.tree_model=QtGui.QStandardItemModel()
self.treeView.setModel(self.tree_model)
self.settings=QtCore.QSettings()
self.recent_files=self.settings.value('recent_files',[])
self.update_recent_files()
python类QStandardItemModel()的实例源码
def make_model_headers(model, full=True, check_all=True):
'''
Set the model horizontal header data
@param model: the QStandardItemModel which headers should be set
When full is set to False this mean the headers are for the user
to review metadata they've created.
'''
center_align = ['Rank', 'Similarity', 'i', 'Matches']
headers = [ ('Function', 'function name'),
('Rank', 'number of times metadata has been applied'),
('Prototype', 'function prototype')]
if full:
full_headers = [headers[0]]
if check_all:
full_headers.append(('Matches', 'number of unique matches'))
full_headers += [
headers[1],
('Similarity', 'percent of how similary the match is to the function'),
headers[2],
('i', 'full prototype information'),
('Engines', 'engines that matched on this function'),
('i', 'detailed engine information'),
('User', 'creator of the metadata')
]
headers = full_headers
i = 0
for display_name, tooltip in headers:
item_header = QtGui.QStandardItem(display_name)
item_header.setToolTip(tooltip)
if display_name in center_align:
item_header.setTextAlignment(Qt.AlignCenter)
model.setHorizontalHeaderItem(i, item_header)
i += 1
def generate_model(self) -> Tuple[QStandardItemModel, QModelIndex]:
"""Generate a Qt Model based on the project structure."""
model = QStandardItemModel()
root = model.invisibleRootItem()
# TODO: Add these icon resources to library or something so they are not loaded every time
dgs_ico = QIcon('ui/assets/DGSIcon.xpm')
flt_ico = QIcon('ui/assets/flight_icon.png')
prj_header = QStandardItem(dgs_ico, "{name}: {path}".format(name=self.name, path=self.projectdir))
prj_header.setEditable(False)
fli_header = QStandardItem(flt_ico, "Flights")
fli_header.setEditable(False)
# TODO: Add a human readable identifier to flights
first_flight = None
for uid, flight in self.flights.items():
fli_item = QStandardItem(flt_ico, "Flight: {}".format(flight.name))
if first_flight is None:
first_flight = fli_item
fli_item.setToolTip("UUID: {}".format(uid))
fli_item.setEditable(False)
fli_item.setData(flight, QtCore.Qt.UserRole)
gps_path, gps_uid = flight.gps_file
gps = QStandardItem("GPS: {}".format(gps_uid))
gps.setToolTip("File Path: {}".format(gps_path))
gps.setEditable(False)
gps.setData(gps_uid) # For future use
grav_path, grav_uid = flight.gravity_file
if grav_path is not None:
_, grav_fname = os.path.split(grav_path)
else:
grav_fname = '<None>'
grav = QStandardItem("Gravity: {}".format(grav_fname))
grav.setToolTip("File Path: {}".format(grav_path))
grav.setEditable(False)
grav.setData(grav_uid) # For future use
fli_item.appendRow(gps)
fli_item.appendRow(grav)
for line in flight:
line_item = QStandardItem("Line {}:{}".format(line.start, line.end))
line_item.setEditable(False)
fli_item.appendRow(line_item)
fli_header.appendRow(fli_item)
prj_header.appendRow(fli_header)
root.appendRow(prj_header)
self.log.debug("Tree Model generated")
first_index = model.indexFromItem(first_flight)
return model, first_index
def fillTagModel(model,dcm,regex=None):
'''Fill a QStandardItemModel object `model' with a tree derived from tags in `dcm', filtering by pattern `regex'.'''
try:
regex=re.compile(str(regex),re.DOTALL)
except:
regex='' # no regex or bad pattern
def _datasetToItem(parent,d):
'''Add every element in `d' to the QStandardItem object `parent', this will be recursive for list elements.'''
for elem in d:
value=_elemToValue(elem)
tag='(%04x, %04x)'%(elem.tag.group,elem.tag.elem)
parent1 = QtGui.QStandardItem(str(elem.name))
tagitem = QtGui.QStandardItem(tag)
if isinstance(value,str):
try:
value=value.decode('ascii')
if '\n' in value or '\r' in value: # multiline text data should be shown as repr
value=repr(value)
except:
value=repr(value)
if not regex or re.search(regex,str(elem.name)+tag+value) is not None:
parent.appendRow([parent1,tagitem,QtGui.QStandardItem(value)])
elif value is not None and len(value)>0:
parent.appendRow([parent1,tagitem])
for v in value:
parent1.appendRow(v)
def _elemToValue(elem):
'''Return the value in `elem', which will be a string or a list of QStandardItem objects if elem.VR=='SQ'.'''
value=None
if elem.VR=='SQ':
value=[]
for i,item in enumerate(elem):
parent1 = QtGui.QStandardItem('%s %i'%(elem.name,i))
_datasetToItem(parent1,item)
if not regex or parent1.hasChildren(): # discard sequences whose children have been filtered out
value.append(parent1)
elif elem.name!='Pixel Data':
value=str(elem.value)
return value
_datasetToItem(model,dcm)
def __init__(self,args,parent=None):
QtGui.QMainWindow.__init__(self,parent)
self.srclist=[] # list of source directories
self.imageIndex=0 # index of selected image
self.seriesMap=OrderedDict() # maps series table row tuples to DicomSeries object it was generated from
self.seriesColumns=list(seriesListColumns) # keywords for columns
self.selectedRow=-1 # selected series row
self.lastDir='.' # last loaded directory root
self.filterRegex='' # regular expression to filter tags by
# create the directory queue and loading thread objects
self.dirQueue=Queue() # queue of directories to load
self.loadDirThread=threading.Thread(target=self._loadDirsThread)
self.loadDirThread.daemon=True # clean shutdown possible with daemon threads
self.loadDirThread.start() # start the thread now, it will wait until something is put on self.dirQueue
# setup ui
self.setupUi(self) # create UI elements based on the loaded .ui file
self.setWindowTitle('DicomBrowser v%s (FOR RESEARCH ONLY)'%(__version__))
self.setStatus('')
# connect signals
self.importButton.clicked.connect(self._openDirDialog)
self.statusSignal.connect(self.setStatus)
self.updateSignal.connect(self._updateSeriesTable)
self.filterLine.textChanged.connect(self._setFilterString)
self.imageSlider.valueChanged.connect(self.setSeriesImage)
self.seriesView.clicked.connect(self._seriesTableClicked)
# setup the list and table models
self.srcmodel=QStringListModel()
self.seriesmodel=SeriesTableModel(self.seriesColumns)
self.seriesmodel.layoutChanged.connect(self._seriesTableResize)
self.tagmodel=QtGui.QStandardItemModel()
# assign models to views
self.sourceListView.setModel(self.srcmodel)
self.seriesView.setModel(self.seriesmodel)
self.tagView.setModel(self.tagmodel)
# create the pyqtgraph object for viewing images
self.imageview=pg.ImageView()
layout=QtGui.QGridLayout(self.view2DGroup)
layout.addWidget(self.imageview)
# load the empty image placeholder into a ndarray
qimg=QtGui.QImage(':/icons/noimage.png')
bytedata=qimg.constBits().asstring(qimg.width()*qimg.height())
self.noimg=np.ndarray((qimg.width(),qimg.height()),dtype=np.ubyte,buffer=bytedata)
# add the directories passed as arguments to the directory queue to start loading
for i in args:
if os.path.isdir(i):
self.addSourceDir(i)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "%s v%s" % (_APPNAME, _VERSION)))
self.label.setText(_translate("MainWindow", "Summoner Name:"))
self.comboRegion.setToolTip(_translate("MainWindow", "EU > NA 4Head"))
self.comboRegion.setItemText(6, _translate("MainWindow", "North America (NA)"))
self.comboRegion.setItemText(2, _translate("MainWindow", "Europe West (EUW)"))
self.comboRegion.setItemText(1, _translate("MainWindow", "Europe Nordic East (EUNE)"))
self.comboRegion.setItemText(3, _translate("MainWindow", "Korea (KR)"))
self.comboRegion.setItemText(4, _translate("MainWindow", "Latin America North (LAN)"))
self.comboRegion.setItemText(5, _translate("MainWindow", "Latin America South (LAS)"))
self.comboRegion.setItemText(7, _translate("MainWindow", "Oceania (OCE)"))
self.comboRegion.setItemText(8, _translate("MainWindow", "Russia (RU)"))
self.comboRegion.setItemText(9, _translate("MainWindow", "Turkey (TR)"))
self.comboRegion.setItemText(10, _translate("MainWindow", "Japan (JP)"))
self.comboRegion.setItemText(0, _translate("MainWindow", "Brazil (BR)"))
self.tabWidgetLeague.setTabText(self.tabWidgetLeague.indexOf(self.tabChallenger), _translate("MainWindow", "Challenger"))
self.tabWidgetLeague.setTabText(self.tabWidgetLeague.indexOf(self.tabMaster), _translate("MainWindow", "Master"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabLeague), _translate("MainWindow", "League"))
self.tabWidget.setTabToolTip(self.tabWidget.indexOf(self.tabLeague), _translate("MainWindow", "Leaderboard of the current selected region."))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabServers), _translate("MainWindow", "Servers"))
self.tabWidget.setTabToolTip(self.tabWidget.indexOf(self.tabServers), _translate("MainWindow", "Check the current state of servers and what\'s online and offline."))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabLogs), _translate("MainWindow", "Logs"))
self.tabWidget.setTabToolTip(self.tabWidget.indexOf(self.tabLogs), _translate("MainWindow", "See what\'s going on while things working and doing their jobs."))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabAbout), _translate("MainWindow", "About"))
self.tabWidget.setTabToolTip(self.tabWidget.indexOf(self.tabAbout), _translate("MainWindow", "What do you think is this?"))
self.txtSummonerName.setToolTip(_translate("MainWindow", "Most be at least 3 characters long and no more than 16 characters long."))
self.GETButton.setToolTip(_translate("MainWindow", "Getting all the summoner\'s data. Including Stats, Runes, Masteries..."))
self.GETButton.setText(_translate("MainWindow", "&Go"))
self.btnSaveLogs.setText(_translate("MainWindow", "&Save Logs as A File..."))
self.btnClearLogs.setText(_translate("MainWindow", "&Clear and &Reset Logs"))
self.aboutLabel.setHtml(ABOUT())
#################################################################################################################
self.current_API = None
self.status_model = QtGui.QStandardItemModel(self.serversView)
self.serversView.setModel(self.status_model)
self.challenger_model = QtGui.QStandardItemModel(self.challengerView)
self.challengerView.setModel(self.challenger_model)
self.master_model = QtGui.QStandardItemModel(self.masterView)
self.masterView.setModel(self.master_model)
self.GETButton.clicked.connect(self.Get_Summoner_Data)
self.btnSaveLogs.clicked.connect(self.SaveLogs)
self.btnClearLogs.clicked.connect(self.ClearLogs)