Pyqt Qlabel 图像缩放问题
from PyQt5.QtCore import QTimer, QStringListModel, Qt
pix = QPixmap.fromImage(qimage)
pix_scaled = pix.scaled(pix.width(), pix.height(), aspectRatioMode=Qt.KeepAspectRatio)
self.label_10.setPixmap(pix_scaled)
想要实现 图片的比例随着界面的拉伸缩小而不破坏长宽比例 ,然鹅不尽人意。
KeepAspectRatio 参数根本没起作用 这是什么原因? 本帖最后由 591821661 于 2021-4-11 16:13 编辑
问题解决了
发现ScaledContents的优先级要大于KeepAspectRatio。。
把这两个设置为False即可
591821661 发表于 2021-4-10 21:58
问题解决了,长宽比例能够保持,但是图片不缩放了!
发现ScaledContents的优先级要大于KeepAspectRatio ...
兄弟,我最近也在用pyqt5(初学,现学现卖哈)
请问有无多窗口参数传递经验呢?
解决了,害。。。有人教我怎么删帖吗。。。自己解决了1个半小时+搜索 解决不了 发个论坛 结果自己解决了{:10_266:} 原来论坛发帖还有这魔力?
不瞎扯了,聊聊正事:
发下菜鸡的代码 供参考和抨击
qr_code_content = self.MovieUrlList
qr_code_maker = qrcode.QRCode(version=5,
error_correction=qrcode.constants.ERROR_CORRECT_M,
box_size=8,
border=4,
)
qr_code_maker.add_data(data=qr_code_content)
qr_code_maker.make(fit=True)
img = qr_code_maker.make_image(fill_color="black", back_color="white")
qimage = ImageQt.ImageQt(img.get_image())
pix = QPixmap.fromImage(qimage)
min_label_len = min(self.label_10.width(), self.label_10.height())
pix_scaled = pix.scaled(min_label_len, min_label_len, aspectRatioMode=Qt.KeepAspectRatio)
self.label_10.setPixmap(pix_scaled)
目前感觉还是比较蠢的实现方法 因为自己设置的图片长宽(我希望它本希望它。。如图)
昨非 发表于 2021-4-10 22:13
兄弟,我最近也在用pyqt5(初学,现学现卖哈)
请问有无多窗口参数传递经验呢?
没有,我也是刚学会点皮毛,不然也不会困扰那么久了{:10_266:}
所有功能都在单窗口实现但是我帮你@hrp
{:10_275:} 591821661 发表于 2021-4-10 22:17
没有,我也是刚学会点皮毛,不然也不会困扰那么久了
所有功能都在单窗口实现但是我帮你@hr ...
其实我也差不多,没有系统地学过pyqt5,只是遇到问题在百度搜方法而已{:10_245:} 昨非 发表于 2021-4-10 22:13
兄弟,我最近也在用pyqt5(初学,现学现卖哈)
请问有无多窗口参数传递经验呢?
多窗口参数传递可以利用pyqt5的信号和槽函数机制,可以跨窗口传递信号(python中的数据类型都可以传递)、连接槽函数,也可以跨线程传递信号和连接槽函数,可以先了解一下pyqt5的信号与槽函数。 hrp 发表于 2021-4-10 22:33
多窗口参数传递可以利用pyqt5的信号和槽函数机制,可以跨窗口传递信号(python中的数据类型都可以传递)、 ...
我知道这个传递,但是从子窗口传过去的信号在接受的时候我是赋值给了一个属性了
这就必然导致这一属性定义不在主窗口类的__init__上,后面会有些影响(抱歉暂时说不清楚哈) hrp 发表于 2021-4-10 22:33
多窗口参数传递可以利用pyqt5的信号和槽函数机制,可以跨窗口传递信号(python中的数据类型都可以传递)、 ...
之前对多窗口编程毫无经验,也没有多文件编程的实战经验
这次从框架上就是自己硬着头皮想出来的,没有现有项目参考
真就是自己比葫芦画瓢,好几个瓢硬是往一起拼
我尽量先自己找找资料吧(如果老哥有推荐的书或教程、项目之类的话,还望分享下)
后续有啥问题自己解决不了还要仰仗老哥指个方向了
提前谢谢啦{:10_297:} 昨非 发表于 2021-4-10 22:51
我知道这个传递,但是从子窗口传过去的信号在接受的时候我是赋值给了一个属性了
这就必然导致这一属性定 ...
你说的应该是信号发射的数据,在主窗口类x中赋值给一个属性了吧,你可以在主窗口类x初始化方法init中初始该属性值为None,当发射信号时更改该属性值,使用该属性的地方,先判断属性值是否为None。不知道你说的是不是这个意思。 hrp 发表于 2021-4-10 23:31
你说的应该是信号发射的数据,在主窗口类x中赋值给一个属性了吧,你可以在主窗口类x初始化方法init中初 ...
你说的这个我今天debug的时候试了(巧了思路完全一样)
但是有问题,就是init初始化后,在槽函数里修改不了这个属性值,测试多次还是初始值 昨非 发表于 2021-4-10 22:56
之前对多窗口编程毫无经验,也没有多文件编程的实战经验
这次从框架上就是自己硬着头皮想出来的,没有现 ...
我自己之前并没有打算学gui,但是后来又有需要,所以都是靠百度现学现卖,没有系统地学过pyqt。
之前看到过一个用pyqt5写的阅读器,可以看看:lector 不过都是英文。 hrp 发表于 2021-4-10 23:47
我自己之前并没有打算学gui,但是后来又有需要,所以都是靠百度现学现卖,没有系统地学过pyqt。
之前看 ...
嗯,谢了老哥 本帖最后由 hrp 于 2021-4-11 01:15 编辑
昨非 发表于 2021-4-10 23:40
你说的这个我今天debug的时候试了(巧了思路完全一样)
但是有问题,就是init初始化后,在槽函数里修改 ...
简单写了个例子:
# coding: utf-8
import sys
from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtWidgets import (
QApplication,
QHBoxLayout,
QLabel,
QLineEdit,
QPushButton,
QVBoxLayout,
QWidget,
)
class MainWin(QWidget):
"""主窗口类"""
def __init__(self):
super().__init__()
self.resize(500, 100)
# 初始化一个属性用于测试
self.my_string = None
self.label = QLabel("文字显示位置")
self.pb = QPushButton("显示子窗口")
self.setup_ui()
self.show()
def setup_ui(self):
"""设置主窗口布局"""
hlayout = QHBoxLayout()
hlayout.addWidget(self.label)
hlayout.addWidget(self.pb)
self.setLayout(hlayout)
def set_label_text(self, string):
"""接收一个字符串参数并在主窗口显示"""
self.label.setText(string)
# 顺便测试更新my_string属性
self.my_string = string
print("当前my_string属性值为:%s" % self.my_string)
class ChildWin(QWidget):
"""子窗口类"""
# 发射字符串的自定义信号
xinhao = pyqtSignal(str)
def __init__(self):
super().__init__()
self.setWindowTitle("输入然后点击")
self.resize(300, 100)
# 设置子窗口打开后主窗口不可点击
self.setWindowModality(Qt.ApplicationModal)
self.pb1 = QPushButton("主窗显示文字")
self.pb2 = QPushButton("主窗显示文字并关闭子窗")
self.line_edit = QLineEdit()
self.setup_ui()
self.connect_signal_slot()
def connect_signal_slot(self):
self.pb1.clicked.connect(self.fashezifu)
self.pb2.clicked.connect(self.fashezifu)
self.pb2.clicked.connect(self.close)
# 自定义信号xinhao连接主窗口的set_label_text方法
self.xinhao.connect(main_win.set_label_text)
# 主窗口的按钮点击信号连接子窗口的show方法
main_win.pb.clicked.connect(self.show)
def setup_ui(self):
"""设置子窗口布局"""
hlayout = QHBoxLayout()
hlayout.addWidget(self.pb1)
hlayout.addWidget(self.pb2)
vlayout = QVBoxLayout()
vlayout.addWidget(self.line_edit)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)
def fashezifu(self):
"""发射xinhao信号,发射一个字符串"""
self.xinhao.emit(self.line_edit.text())
app = QApplication(sys.argv)
main_win = MainWin()
child_win = ChildWin()
sys.exit(app.exec_())
昨非 发表于 2021-4-11 00:08
嗯,谢了老哥
我自己写的AwesomePyKit也用到多窗口,可惜我因为懒没写注释{:10_245:} hrp 发表于 2021-4-11 00:42
我自己写的AwesomePyKit也用到多窗口,可惜我因为懒没写注释
关机了,有空这聊天就研究研究哈,老哥早点睡,注意头发 hrp 发表于 2021-4-11 00:39
简单写了个例子:
学习到了!正好想通过子窗口设置代理!!{:10_281:}
页:
[1]