python - 使用 PyQT5 调整窗口大小 - 如何减小小部件的大小以缩小窗口?
问题描述
我试图通过重新制作一个用于处理像素艺术的旧命令行 C 程序来学习它。
目前,主窗口以单个 QLabel 设置开始,以显示 10 x 10 白色图像的 300 x 300 放大版本。
我正在使用 resizeEvent (我也尝试过使用相同问题的paintEvent)来重新缩放图像以在窗口大小增加时填充窗口。
我的问题是,当窗口大小减小时,如何重新缩放图像以适应窗口?就目前而言,窗口的大小不能调整为小于显示图像的小部件。本质上,我可以使窗口(和图像)更大,但永远不会变小。
到目前为止,我的代码如下。就目前而言,它仅根据窗口宽度的变化工作,只是为了在我解决这个问题时保持简单。有没有办法让窗口调整为小于最大的小部件?或者有没有更好的方法来解决这个问题?
#Create white 10*10 image
image = QImage(10,10,QImage.Format.Format_ARGB32)
image_scaled = QImage()
image.fill(QColor(255,255,255))
class Window(QMainWindow):
#scale image to change in window width (image is window width * window width square)
def resizeEvent(self,event):
if self.imageLabel.width()>self.imageLabel.height():
self.image_scaled = image.scaled(self.imageLabel.width(),self.imageLabel.width())
self.pixmap = QPixmap.fromImage(self.image_scaled)
self.imageLabel.setPixmap(self.pixmap)
QWidget.resizeEvent(self, event)
def __init__(self, parent=None):
super().__init__(parent)
self.setGeometry(100,100,300,300)
self.imageLabel = QLabel()
self.setCentralWidget(self.imageLabel)
self.image_scaled = image.scaled(self.imageLabel.width(),self.imageLabel.width())
self.pixmap = QPixmap.fromImage(self.image_scaled)
self.imageLabel.setPixmap(self.pixmap)
app = QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())
解决方案
找到了解决方案。事实证明,即使滚动条被禁用,将图像放在 QScrollArea 小部件中也可以使窗口小于它包含的图像。然后,当窗口大小减小时,这允许重新缩放图像以适应窗口。
class Window(QMainWindow):
#scale image to change in window width (image is window width * window width square)
def resizeEvent(self,event):
self.image_scaled = image.scaled(self.scroll.width(),self.scroll.height())
self.pixmap = QPixmap.fromImage(self.image_scaled)
self.imageLabel.setPixmap(self.pixmap)
QMainWindow.resizeEvent(self, event)
def __init__(self, parent=None):
super().__init__(parent)
self.setGeometry(100,100,200,200)
self.imageLabel = QLabel()
self.scroll = QScrollArea()
self.scroll.setWidget(self.imageLabel)
self.setCentralWidget(self.scroll)
self.scroll.setWidgetResizable(True)
self.scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.image_scaled = image.scaled(self.scroll.width(),self.scroll.width())
self.pixmap = QPixmap.fromImage(self.image_scaled)
self.imageLabel.setPixmap(self.pixmap)
app = QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())
推荐阅读
- html - 我如何才能将此下拉列表绝对定位在溢出滚动父级中?
- excel - 如何在另一个工作表上连续查找第 n 个最后一个非空单元格
- javascript - 无法让 jQuery/JS 重定向按钮工作
- node.js - 如何使用 ReactApp 正确存储 clientId、客户端密码和 OAuth2 令牌
- c++ - Qt Queued Slots 中的枚举和枚举类
- javascript - Javascript 在直接条件下不工作,而间接条件下工作
- xaml - 有没有办法在 Xamarin 中设置 MasterDetailPage.Master 的宽度?
- javascript - 使用 Mongoose 查找子文档字段部分匹配给定条件的文档
- xcode - 合并与 xcschememanagement.plist 相关的分支时出现 Xcode 错误
- macos - 插入时 Elasticsearch 显示错误 406