gpt4 book ai didi

python - Qlabel 中的像素图图像大小

转载 作者:行者123 更新时间:2023-12-01 01:36:40 26 4
gpt4 key购买 nike

我试图在不使用 setScaledContents(True) 的情况下获得完全适合我的标签的图像,因为我希望 ImageGrab 具有与 QLabel 空间完全相同的尺寸。

我使用带有 bbox 的 PIL ImageGrab。如果我将参数设置为更宽的宽度和更高的高度,它将使程序崩溃而不会出现任何错误。我附上了一张图片,其中标签中的图像位于左中心。我想要它在左上角。这样,如果我增加尺寸,它可以向下和向右扩展。

但我很好奇为什么我无法增加 bbox 的大小。 (0, 0, 400, 220) 工作正常,但 (0, 0, 420, 220) 不会上传图像并关闭 GUI,不会出现任何错误。

我想要一个带有 bbox (0, 0, 800, 700) 的 ImageGrab 和一个带有 size(800, 700) 的 QLabel,这样它就可以完美地适应它。

class Main(QMainWindow):
def __init__(self, parent=None):
QWidget.__init__(self, parent)

self.setGeometry(200, 200, 1000, 700)
self.setWindowTitle('threads')

self.mainFrame = QFrame(self)
self.mainFrame.resize(1000, 650)
self.mainFrame.move(0, 50)
self.mainFrame.setStyleSheet("background-color: rbg(50, 50, 50)")

self.testButton = QPushButton("Click", self)
self.testButton.resize(500,30)
self.connect(self.testButton, SIGNAL("clicked()"), self.Capture)

self.label_ = QLabel(self.mainFrame)
self.label_.move(10, 10)
self.label_.resize(980, 630)
self.label_.setStyleSheet("background-color: rbg(150, 150, 150)")

@pyqtSlot(QImage)
def ChangeFrame(self, image):

pixmap = QPixmap.fromImage(image)
self.label_.setPixmap(pixmap)

def Capture(self):
self.thread_ = CaptureScreen()
self.connect(self.thread_, SIGNAL("ChangeFrame(QImage)"), self.ChangeFrame, Qt.QueuedConnection)
self.thread_.start()


class CaptureScreen(QThread):
pixmap = pyqtSignal(QImage)

def __init__(self, parent = None):
QThread.__init__(self)

def __del__(self):
print("?????")
self.exiting = True
self.wait()

def run(self):
while(True):
time.sleep(1/60)

img = ImageGrab.grab(bbox=(0, 0, 420, 220))

frame = ImageQt(img)
frame = QImage(frame)

self.emit( SIGNAL("ChangeFrame(QImage)"), frame)

enter image description here

最佳答案

解决方案是使用布局,并在QtCore.Qt.AlignTop | 中设置对齐方式。 QtCore.Qt.AlignLeft.

我还建议使用新的连接语法,另一方面,如果您要在构造函数中继承 QMainWindow,则必须调用它。最后,当您使用 QMainWindow 时,您必须设置一个中央小部件。

import time
from PyQt4 import QtCore, QtGui
from PIL import ImageGrab, ImageQt


class Main(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)

self.setGeometry(200, 200, 1000, 700)
self.setWindowTitle('threads')

main_widget = QtGui.QWidget()
self.setCentralWidget(main_widget)

lay = QtGui.QVBoxLayout(main_widget)
self.testButton = QtGui.QPushButton("Click")
self.testButton.setFixedHeight(30)
self.testButton.clicked.connect(self.capture)

mainFrame = QtGui.QFrame()
mainFrame.setStyleSheet("background-color: rbg(50, 50, 50)")

_lay = QtGui.QVBoxLayout(mainFrame)
_lay.setContentsMargins(0, 0, 0, 0)
self.label_ = QtGui.QLabel()
_lay.addWidget(self.label_, 0, QtCore.Qt.AlignTop|QtCore.Qt.AlignLeft)

lay.addWidget(self.testButton)
lay.addWidget(mainFrame)

@QtCore.pyqtSlot(QtGui.QImage)
def changeFrame(self, image):
pixmap = QtGui.QPixmap.fromImage(image)
self.label_.setPixmap(pixmap)

@QtCore.pyqtSlot()
def capture(self):
self.thread_ = CaptureScreen()
self.thread_.changedFrame.connect(self.changeFrame, QtCore.Qt.QueuedConnection)
self.thread_.start()
self.testButton.setDisabled(True)


class CaptureScreen(QtCore.QThread):
changedFrame = QtCore.pyqtSignal(QtGui.QImage)

def __del__(self):
print("?????")
self.exiting = True
self.quit()
self.wait()

def run(self):
while True:
time.sleep(1/60)
w, h = 420, 220
img = ImageGrab.grab(bbox=(0, 0, w, h))
frame = ImageQt.toqimage(img)
self.changedFrame.emit(QtGui.QImage(frame))


if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = Main()
w.show()
sys.exit(app.exec_())

关于python - Qlabel 中的像素图图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52336807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com