PyQt5 - Größe-label, um das ganze Fenster auszufüllen
from PyQt5 import QtGui, QtCore, QtWidgets
class Window(QtWidgets.QWidget):
def __init__(self):
QtWidgets.QWidget.__init__(self)
self.label = QtWidgets.QLabel(self)
self.label.setSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Ignored)
self.label.resize(800, 600)
self.label.setContentsMargins(0, 0, 0, 0);
self.pixmap = QtGui.QPixmap("image.jpg")
self.label.setPixmap(self.pixmap)
self.label.setMinimumSize(1, 1)
self.label.installEventFilter(self)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.label)
def eventFilter(self, source, event):
if (source is self.label and event.type() == QtCore.QEvent.Resize):
self.label.setPixmap(self.pixmap.scaled(
self.label.size(), QtCore.Qt.KeepAspectRatio))
return super(Window, self).eventFilter(source, event)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = Window()
window.show()
window.resize(800, 600)
sys.exit(app.exec_())
Dies ist meine Bewerbung, mein Ziel ist einfach - ein Bild, das füllt das ganze Fenster und ändert die Größe, nachdem Sie das Fenster Größe ändern.
Dieser code funktioniert okay in der Größe des Bildes, aber das label deckt nicht das gesamte Fenster, ich habe diese "Grenzen". Wie kann ich Sie entfernen/verkleinern Sie das Etikett, um die Größe der Fenster?
Ich arbeite auf Windows, wenn dieses ändert die Dinge.
Dass ist der Effekt, den ich jetzt bekommen.
- Was ist das gewünschte Verhalten der Anwendung? Wenn das Bild
image.jpg
hat nicht passen in die Fenster (wie in dem angegebenen screen-shot), was soll passieren? Das Bild-Seitenverhältnis ändern sollte? Oder Teil des Bildes beschnitten werden soll? - Bild sollte über die gesamte Fenster, wenn es zu klein sollte es werden, up-scaling. Gerade jetzt, wenn ich die Größe des Bildes skaliert, aber ich möchte nicht diese grauen "Grenzen".
- - Seitenverhältnis des Bildes (Fenster-und widget) sollte beibehalten werden oder es haben zu Folgen das Seitenverhältnis des Fensters?
- Ich denke, es sollte mehr oder weniger erhalten, aber ich nehme die zweite option auch 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich löste es in PyQt4, so bin ich mir nicht 100% sicher, ob es für PyQt5, aber ich denke, es sollte (einige kleinere Modifikationen notwendig werden könnten, z.B. import-PyQt5 statt PyQt4).
Das wichtigste für Sie ist die definition von
resizeEvent
. Sie könnte verwenden, die bereits definiertself.pixmap
- und nur die Größe ändern, aber die Qualität des Bildes herabsetzen würde das mehr Größenänderung, die Sie verwenden. Daher ist es besser, immer wieder neuepixmap
skaliert, um aktuellewidth
undheight
desWindow
.Muss kein
QLabel
in der separatenQWidget
. Sie können einfach ErbenQLabel
stattQWidget
. Es wird Ihr code einfacher und sauberer:In Fall, dass Sie möchten, um das einbetten der
MyLabelPixmap
widget in dieQMainWindow
fügen Sie einfach in IhremQMainWindow.__init__