Od soboty do úterý probíhá v Hamburku konference 39C3 (Chaos Communication Congress) věnovaná také počítačové bezpečnosti nebo hardwaru. Program (jiná verze) slibuje řadu zajímavých přednášek. Streamy a záznamy budou k dispozici na media.ccc.de.
Byl představen nový Xserver Phoenix, kompletně od nuly vyvíjený v programovacím jazyce Zig. Projekt Phoenix si klade za cíl být moderní alternativou k X.Org serveru.
XLibre Xserver byl 21. prosince vydán ve verzi 25.1.0, 'winter solstice release'. Od založení tohoto forku X.Org serveru se jedná o vůbec první novou minor verzi (inkrementovalo se to druhé číslo v číselném kódu verze).
Wayback byl vydán ve verzi 0.3. Wayback je "tak akorát Waylandu, aby fungoval Xwayland". Jedná se o kompatibilní vrstvu umožňující běh plnohodnotných X11 desktopových prostředí s využitím komponent z Waylandu. Cílem je nakonec nahradit klasický server X.Org, a tím snížit zátěž údržby aplikací X11.
Byla vydána verze 4.0.0 programovacího jazyka Ruby (Wikipedie). S Ruby Box a ZJIT. Ruby lze vyzkoušet na webové stránce TryRuby. U příležitosti 30. narozenin, první veřejná verze Ruby 0.95 byla oznámena 21. prosince 1995, proběhl redesign webových stránek.
Všem čtenářkám a čtenářům AbcLinuxu krásné Vánoce.
Byla vydána nová verze 7.0 linuxové distribuce Parrot OS (Wikipedie). S kódovým názvem Echo. Jedná se o linuxovou distribuci založenou na Debianu a zaměřenou na penetrační testování, digitální forenzní analýzu, reverzní inženýrství, hacking, anonymitu nebo kryptografii. Přehled novinek v příspěvku na blogu.
Vývojáři postmarketOS vydali verzi 25.12 tohoto před osmi lety představeného operačního systému pro chytré telefony vycházejícího z optimalizovaného a nakonfigurovaného Alpine Linuxu s vlastními balíčky. Přehled novinek v příspěvku na blogu. Na výběr jsou 4 uživatelská rozhraní: GNOME Shell on Mobile, KDE Plasma Mobile, Phosh a Sxmo.
Byla vydána nová verze 0.41.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 6.1 nebo novější a také libplacebo 6.338.2 nebo novější.
Byla vydána nová verze 5.5 (novinky) skriptovacího jazyka Lua (Wikipedie). Po pěti a půl letech od vydání verze 5.4.
#!/usr/bin/python
import sys
import os
import string
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.resize(400, 400)
self.setWindowTitle('segmentation')
#status bar
self.statusBar().showMessage('Ready')
#exit
exit = QtGui.QAction('Exit', self)
exit.setStatusTip('Exit application')
self.connect(exit, QtCore.SIGNAL('triggered()'), self.close)
#open bmp
openBMP= QtGui.QAction('Open BMP', self)
openBMP.setStatusTip('Open directory with BMP images')
self.connect(openBMP, QtCore.SIGNAL('triggered()'), self.BMP)
#menu bar
menubar = self.menuBar()
file = menubar.addMenu('&File')
file.addAction(exit)
file.addAction(openBMP)
def BMP(self):
print "open directory with bmp images"
dirname = QtGui.QFileDialog.getExistingDirectory(self,"Open Directory with bmp images",'./',QtGui.QFileDialog.ShowDirsOnly)
print "choosen directory: ",dirname
file_in_dir=os.listdir(str(dirname))
file_prefix=[]
for i in range (len(file_in_dir)):
print "file laoded: ", file_in_dir[i]
prefix=string.split(file_in_dir[i],".")
if (prefix[0] in file_prefix)==False:
file_prefix.append(prefix[0])
print "number loaded images from directory: ",i+1
self.file_prefix=file_prefix
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
Nicméně, pár poznámek k tomu co vidím:
- čeho chceš vlastně docílit? Seznamu názvů souborů bez koncovek? Nebo máš nějaké specifické názvy souborů, které obsahují speciální prefix? Nebo se u tebe bmp soubory jmenuji "bmp.nazev"?
- předpokládám, že "chovalo se to divně" znamená, že se ti prvky v QMainWindow neukazovaly tak jak jsi chtěl. Nezapomínej, že QMainWindow je pouze kontejner, který obsahuje status bary, menu bary a jiné bary, ale kromě toho mu musíš dodat i nějaký CentralWidget, což je teprve ten prvek, do kterého můžeš umisťovat své custom objekty.
- pro převod z QStringu s názvem adresáře použij spíš unicode() než str().
- iteruj přímo nad listem, který ti vrátil os.listdir(adresář), počet projetých souborů na konci vrať jako len(file_in_dir), nemusíš přičítat jedničku.
if prefix[0] not in file_prefix:
ne
if (prefix[0] in file_prefix)==False:
A když už jsme u toho, asi bych celou tuhle smyčku napsal jako set([item.split('.')[0] for item in file_prefix]). Sice dostaneš set a ne list, ale ten můžeš iterovat taky, a přinejhorším ho vždycky můžeš převést zpět na list pomocí list().
Dalo by se pokračovat, ale taky už jsem při nedělním večeru línej
Jestli jsi začátečník i v Pythonu, nejen v PyQt4, doporučuju raději začít u základů, a ne se hned vrhat na GUI aplikace. Nebudeš si zbytečně lámat hlavu nad věcmi, které plynou právě z těch základů.
#!/usr/bin/python
import sys
import os
import string
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.resize(400, 400)
self.setWindowTitle('segmentation')
#status bar
self.statusBar().showMessage('Ready')
#exit
exit = QtGui.QAction('Exit', self)
exit.setStatusTip('Exit application')
self.connect(exit, QtCore.SIGNAL('triggered()'), self.close)
#open bmp
openBMP= QtGui.QAction('Open BMP', self)
openBMP.setStatusTip('Open directory with BMP images')
self.connect(openBMP, QtCore.SIGNAL('triggered()'), self.BMP)
#menu bar
menubar = self.menuBar()
file = menubar.addMenu('&File')
file.addAction(exit)
file.addAction(openBMP)
def BMP(self):
print "open directory with bmp images"
dirname = QtGui.QFileDialog.getExistingDirectory(self,"Open Directory with bmp images",'./',QtGui.QFileDialog.ShowDirsOnly)
print "choosen directory: ",dirname
file_in_dir=os.listdir(str(dirname))
file_prefix=[]
for i in range (len(file_in_dir)):
print "file laoded: ", file_in_dir[i]
prefix=string.split(file_in_dir[i],".")
if (prefix[0] in file_prefix)==False:
file_prefix.append(prefix[0])
print "number loaded images from directory: ",i+1
self.file_prefix=file_prefix
self.ChBox_prefix=CheckBox_BMP()
print self.ChBox_prefix.create_values(self)
class CheckBox_BMP(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
ChB_BMPWidget=QtGui.QWidget(self)
self.setWindowTitle('Choose prefix')
self.setGeometry(300, 300, 210, 60)
self.show()
def create_values(self,parent):
ChB_grid=QtGui.QGridLayout(self)
ChB_BMP_Label=QtGui.QLabel("Choose prefix: ",self)
ChB_grid.addWidget(ChB_BMP_Label,0,0)
self.cb=[]
for i in range(len(parent.file_prefix)):
self.cb.append(QtGui.QRadioButton(parent.file_prefix[i],self))
self.cb[i].setFocusPolicy(QtCore.Qt.NoFocus)
ChB_grid.addWidget(self.cb[i],i+1,0)
print "loaded prefix:",parent.file_prefix
self.cb[0].setChecked(True)
OK_button=QtGui.QPushButton("OK",self)
ChB_grid.addWidget(OK_button,i+2,1,QtCore.Qt.AlignRight)
self.connect(OK_button,QtCore.SIGNAL("clicked()"),self.what_prefix)
def what_prefix(self):
i=0
while (self.cb[i].isChecked()==False):
i=i+1
print "choosen prefix: ",i
self.close()
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
), tak jako mateřskou třídu pro CheckBox_BMP použij QDialog, ne QWidget, s tím že mu při vytvoření předáš jako parametr pro parent odkaz na MainWindow (tzn. že při jeho konstrukci v metodě MainWindow.BMP() stačí self.ChBox_prefix=CheckBox_BMP(self). Potom v instanci CheckBox_BMP získaš odkaz na MainWindows pomocí metody self.parent(), a můžeš napsat např. self.parent().chosen_prefix = self.cb[i].text(), a v MainWindow si pak přečteš prefix přes self.chosen_prefix. Ale pořád je to strašně prasácký
Nicméně z toho si nedělej, proti tomu co jsem psával ze začátku já to máš ještě zlatý
#!/usr/bin/python
import sys
import os
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.resize(400, 400)
self.setWindowTitle('segmentation')
#status bar
self.statusBar().showMessage('Ready')
#exit
exit = QtGui.QAction('Exit', self)
exit.setStatusTip('Exit application')
self.connect(exit, QtCore.SIGNAL('triggered()'), self.close)
#open bmp
openBMP= QtGui.QAction('Open BMP', self)
openBMP.setStatusTip('Open directory with BMP images')
self.connect(openBMP, QtCore.SIGNAL('triggered()'), self.BMP2)
#menu bar
menubar = self.menuBar()
file = menubar.addMenu('&File')
file.addAction(exit)
file.addAction(openBMP)
self.chosen_prefix = None
def BMP2(self):
print "open directory with bmp images"
dirname = QtGui.QFileDialog.getExistingDirectory(self,"Open Directory with bmp images",'./',QtGui.QFileDialog.ShowDirsOnly)
print "choosen directory: ",dirname
file_in_dir=os.listdir(unicode(dirname))
file_prefix = list(set([item.split('.')[0] for item in file_in_dir]))
print "number loaded images from directory: ",len(file_in_dir)
chosen_prefix, dialog_status = QtGui.QInputDialog.getItem(self, u'Choose prefix', u'Choose prefix', file_prefix, 0, False)
if dialog_status: self.chosen_prefix = chosen_prefix
print "Chosen prefix:", self.chosen_prefix
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
Tiskni
Sdílej: