Příspěvek na blogu Ubuntu upozorňuje na několik zranitelností v rozšíření Linuxu o mandatorní řízení přístupu AppArmor. Společně jsou označovány jako CrackArmor. Objevila je společnost Qualys (technické detaily). Neprivilegovaný lokální uživatel se může stát rootem. Chyba existuje od roku 2017. Doporučuje se okamžitá aktualizace. Problém se týká Ubuntu, Debianu nebo SUSE. Red Hat nebo Fedora pro mandatorní řízení přístupu používají SELinux.
Byla vydána nová verze 19 integrovaného vývojového prostředí (IDE) Qt Creator. Podrobný přehled novinek v changelogu.
Bitwig Studio (Wikipedie) bylo vydáno ve verzi 6. Jedná se o proprietární multiplatformní (macOS, Windows, Linux) digitální pracovní stanici pro práci s audiem (DAW).
Společnost Igalia představila novou linuxovou distribuci (framework) s názvem Moonforge. Jedná se o distribuci určenou pro vestavěné systémy. Vychází z projektů Yocto a OpenEmbedded.
Google Chrome 146 byl prohlášen za stabilní. Nejnovější stabilní verze 146.0.7680.71 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 29 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
D7VK byl vydán ve verzi 1.5. Jedná se o fork DXVK implementující překlad volání Direct3D 3 (novinka), 5, 6 a 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.
Bylo vydáno Eclipse IDE 2026-03 aneb Eclipse 4.39. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
Ze systému Slavia pojišťovny uniklo přibližně 150 gigabajtů citlivých dat. Jedná se například o pojistné dokumenty, lékařské záznamy nebo přímou komunikaci s klienty. Za únik může chyba dodavatelské společnosti.
Sněmovna propustila do dalšího kola projednávání vládní návrh zákona o digitální ekonomice, který má přinést bezpečnější on-line prostředí. Reaguje na evropské nařízení DSA o digitálních službách a upravuje třeba pravidla pro on-line tržiště nebo sociální sítě a má i víc chránit děti.
Meta převezme sociální síť pro umělou inteligenci (AI) Moltbook. Tvůrci Moltbooku – Matt Schlicht a Ben Parr – se díky dohodě stanou součástí Meta Superintelligence Labs (MSL). Meta MSL založila s cílem sjednotit své aktivity na poli AI a vyvinout takovou umělou inteligenci, která překoná lidské schopnosti v mnoha oblastech. Fungovat by měla ne jako centralizovaný nástroj, ale jako osobní asistent pro každého uživatele.
#!/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: