展示文字或者图片一般都用QLabel类,但是系统自带的QLabel没有clicked信号,虽然可以通过重写类的方式来实现,但是还是挺麻烦而且不原生态。其实,可以直接用QPushButton来作为类,将图片充满整个按钮。这样就可以用按钮的所有功能了,点击信号更是基本操作。适当的样式美化一下,这样比重写QLabel舒服多了。

实现的目标效果

最终效果如下图所示,是我之前做的一个项目中的一个界面。今天的主角就是这四个按钮。

四个按钮

下面,我仅仅以写一个按钮的核心代码。差不多时模板吧,然后就是复制粘贴修改图片的事情了。

为了方便,我随便再网上下载了几张图片。

将icon铺满整个按钮QPushButton

核心代码:

p1 = QPushButton(window)
picture1 = QPixmap("p1.png")
new_pixmap1 = picture1.scaled(300, 300)
p1.setFixedSize(300, 300)
p1.setIcon(QIcon(new_pixmap1))
p1.setIconSize(QSize(300, 300))
p1.setStyleSheet("QPushButton{border-radius:10px}")
p1.setFlat(True)
p1.move(100, 100)

# 需要注意按钮个图片的尺寸,这里我把图片和按钮都设置为300X300,也就是铺满了

带槽函数的完整代码:

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys

# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)

# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("按钮-图片-点击")  # 标题
window.resize(500, 500)                     # 窗口的大小
window.move(400, 200)                       # 窗口初次显示的位置

# 创建其他控件
p1 = QPushButton(window)
picture1 = QPixmap("p1.png")
new_pixmap1 = picture1.scaled(300, 300)
p1.setFixedSize(300, 300)
p1.setIcon(QIcon(new_pixmap1))
p1.setIconSize(QSize(300, 300))
p1.setStyleSheet("QPushButton{border-radius:10px}")
p1.setFlat(True)
p1.move(100, 100)

p1.clicked.connect(lambda: print("p1被按下"))  # 这里写了一个匿名函数,仅仅作为演示

window.show()                               # 显示窗口,不然啥也没有

sys.exit(app.exec_())

运行效果:

运行效果

絮絮叨叨

其实我也在边学边做。很多零零碎碎的技巧或者可能会用到的,我就单独拿出来写写,希望能帮助到你。


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/fullbutton.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 08 月 12 日
如果觉得我的文章对你有用,请随意赞赏