from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
import io
from PIL import Image
import stagger
class pencere(QWidget):
def __init__(self):
super().__init__()
self.setUI()
def setUI(self):
self.label = QLabel(self)
resim = self.resim_al()
pixmap = QPixmap(resim)
self.label.setPixmap(pixmap)
vbox = QVBoxLayout(self)
vbox.addWidget(self.label)
def resim_al(self):
sarki = "C:/Users/Asus/Desktop/mp3_müzikler/Zolf - Mohsen Namjoo _ Nederlands Blazers Ensemble.mp3"
mp3 = stagger.read_tag(sarki)
by_data = mp3[stagger.id3.APIC][0].data
im = io.BytesIO(by_data)
imageFile = Image.open(im)
print(imageFile.format) # JPEG
return imageFile
app = QApplication(sys.argv)
pencere = pencere()
pencere.show()
app.exec_()
Label’a şarkının resmini göndermeye çalışıyorum. Fakat şu hatayı veriyor. Hatanın neden kaynaklandığını da biliyorum.
pixmap = QPixmap(resim)
TypeError: QPixmap(): argument 1 has unexpected type 'JpegImageFile'
JPEG
Aşağıdaki kodun çıktısı JPEG
print(imageFile.format) # JPEG
Normalde QPixmap jpeg türü dosyaları kabul ediyor ama neden burda hata aldım onu anlamadım.
Şimdiden teşekkürler.
Qpixmap(resim) type hatası veriyor.
Burada Kodlar bulunnuyor.
Buraya baktım fakat işime yaramadı
Kodun tam hata çıktısını atarmısınız ?
"C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\python.exe" "C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.2\plugins\python-ce\helpers\pydev\pydevd.py" --multiproc --qt-support=auto --client 127.0.0.1 --port 52994 --file "C:/Users/pl/Desktop/PYTHON/PyQt5 Dersleri/Müzik Çalar Projesi-2/çalışma5.py"
pydev debugger: process 10136 is connecting
Connected to pydev debugger (build 193.6911.25)
JPEG
Traceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.2\plugins\python-ce\helpers\pydev\pydevd.py", line 1434, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.2\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/pl/Desktop/PYTHON/PyQt5 Dersleri/Müzik Çalar Projesi-2/çalışma5.py", line 39, in <module>
pencere = pencere()
File "C:/Users/pl/Desktop/PYTHON/PyQt5 Dersleri/Müzik Çalar Projesi-2/çalışma5.py", line 12, in __init__
self.setUI()
File "C:/Users/pl/Desktop/PYTHON/PyQt5 Dersleri/Müzik Çalar Projesi-2/çalışma5.py", line 18, in setUI
pixmap = QPixmap(resim)
TypeError: QPixmap(): argument 1 has unexpected type 'JpegImageFile'
resim_al()
fonksiyonu doğru olsa bile muhtemelen resmi Jpeg biçiminde almıyor olabilir.
Normal bir jpeg dosyasını qpixmap’e atınca oldu ama
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
import io
import stagger
# PIL modülüne ihtiyaç yok
class pencere(QWidget):
def __init__(self):
super().__init__()
self.setUI()
def setUI(self):
self.label = QLabel(self)
resim = self.resim_al()
mpixmap = QPixmap()
mpixmap.loadFromData(resim, "JPEG") # veriyi yüklüyor
self.label.setPixmap(mpixmap)
vbox = QVBoxLayout(self)
vbox.addWidget(self.label)
def resim_al(self):
sarki = "C:/Users/Asus/Desktop/mp3_müzikler/Zolf - Mohsen Namjoo _ Nederlands Blazers Ensemble.mp3"
mp3 = stagger.read_tag(sarki)
by_data = mp3[stagger.id3.APIC][0].data
return by_data # byte olan veriyi döndürüyor
app = QApplication(sys.argv)
pencere = pencere()
pencere.show()
app.exec_()
Resmi direkt byte’dan görüntülemek için PIL
modülü yerine QPixmap
içerisinden loadFromData
metodunu kullanmalısınız.
Çok teşekkür ederim kardeşim. Bu işimi görür
Bende bir şey sormak istiyorum belirli bir pathden alinan resmi belirli bir surface e sığdırarak ekrana bastırmak mumkunmu PyQt5 ye?
def picture_changed(self):
self.picture = Song_Picture(self.song_path).picture()
if self.picture:
pixmap = QPixmap()
pixmap.loadFromData(self.picture,"jpeg")
pixmap.scaled(64,64)
self.song_picture.setPixmap(pixmap)
else:
self.song_picture.setPixmap(QPixmap("C:/Users/Asus/Desktop/music.jpg"))
self.song_picture’un ayarları da şu:
self.song_picture = QLabel(self)
self.song_picture.setFixedSize(QSize(350, 350))
self.song_picture.setScaledContents(True)
Yani label’in boyutunu sınırladım ve Qpixmap’i de ölçeklendirince oldu.Sorunuzun cevabı oldu mu tam emin değilim
1 Beğeni