PyQT5之QComboBox
1.PyQT5图像2.PyQT5水平垂直布局3.PyQT5之图片左右翻页4.PyQT5之QPushButton和布局5.PyQT5之label6.PyQT5之选择图片7.PyQT5之自定义信号8.PyQT5之窗口9.PyQT5之菜单栏和工具栏
10.PyQT5之QComboBox
11.PyQT5之Checkbox12.PyQT5之QRadioButton13.PyQT5之单行文本输入到多行显示窗14.PyQT5之网格布局多图片显示15.PyQtGraph绘制折线图16.PyQT5之PyQtGraph实时数据显示17.PyQT5之窗口最大化最小化18.PyQT5之QSS基础/子控件选择器19.PyQT5样式设置20.PyQT5绘图21.PyQT5窗口样式设置22.PyQT5之设置窗口控件风格23.PyQT5之多窗口交互24.PyQT5之override覆盖槽函数25.PyQT5之为槽函数传递参数26.PyQT5信号与槽的连接27.PyQT5信号刷新时间28.PyQT5之信号关闭窗口29.信号与槽N对N30.PyQT5之多个信号31.PyQT5之QTreeView32.PyQT5内嵌html33.PyQT5加载本地web页面34.PyQT5之QWebEngineView35.PyQT5之QThread36.PyQT5之QTimer37.PyQT5之QStackedWidget38.PyQT5之QTreeWidget-QTabWidget39.PyQT5之QTableWidget40.PyQT5之QListWidget41.PyQT5之QListView42.PyQT5之二维表QTableView43.PyQT5打印机44.PyQT5之QPainter45.PyQT5之QFontDialog46.PyQT5之QInputDialog47.PyQT5之QMessageBox48.PyQT5之QDialog49.PyQT5之多页面切换50.PyQT5之计数器控件QSpinBox51.PyQT5之滑块控件QSlider52.PyQtGraph绘图参考53.PyQtGraph之多图绘制54.PyQtGraph之柱状图55.PyQt5选择文件控件QFileDialog
import os.path
from PyQt5 import QtWidgets
from PyQt5 import QtCore, QtGui
import sys
import cv2
class SpinBoxPanel(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
select_btn = QtWidgets.QPushButton("图像选择")
self.path_label = QtWidgets.QLabel()
self.path_label.setText("当前未显示图像路径")
self.path_label.setAlignment(QtCore.Qt.AlignCenter) # label上居中显示
self.path_label.setMaximumHeight(50) # label最大高度设置
self.path_label.setStyleSheet("background-color:pink;color:green") # 背景颜色设置
font = QtGui.QFont()
font.setBold(True)
font.setPointSizeF(10)
self.path_label.setFont(font)
self.image_label = QtWidgets.QLabel()
# 方法二:使用cv2显示
src = cv2.imread("./image/img1.png") # BGR
image = cv2.cvtColor(src, cv2.COLOR_BGR2RGB) # 将BGR转为RGB
h, w, c = image.shape
img = QtGui.QImage(image.data, w, h, 3 * w, QtGui.QImage.Format_RGB888)
pixmap = QtGui.QPixmap(img)
pix = pixmap.scaled(QtCore.QSize(640, 640), QtCore.Qt.KeepAspectRatio) # 自动保持比例放缩方式
self.image_label.setPixmap(pix) # 设置图像显示
self.image_label.setAlignment(QtCore.Qt.AlignCenter) # label上的内容居中显示
self.image_label.setStyleSheet("background-color:blue;color:green") # 背景颜色设置
self.win_spinbox = QtWidgets.QSpinBox()
self.win_spinbox.setRange(0, 100)
self.win_spinbox.setSingleStep(1)
self.win_spinbox.setValue(0)
self.sigma_spinbox = QtWidgets.QSpinBox()
self.sigma_spinbox.setRange(0, 100)
self.sigma_spinbox.setSingleStep(1)
self.sigma_spinbox.setValue(15)
paramPanel = QtWidgets.QGroupBox("参数设置")
hbox = QtWidgets.QHBoxLayout()
hbox.addWidget(QtWidgets.QLabel("窗口:"))
hbox.addWidget(self.win_spinbox)
hbox.addWidget(QtWidgets.QLabel("方差:"))
hbox.addWidget(self.sigma_spinbox)
# hbox.addStretch(1)
paramPanel.setLayout(hbox)
self.combox = QtWidgets.QComboBox()
self.combox.addItem("原图")
self.combox.addItem("高斯模糊")
comboxPanel = QtWidgets.QGroupBox("方法选择")
hbox2 = QtWidgets.QHBoxLayout()
hbox2.addWidget(self.combox)
comboxPanel.setLayout(hbox2)
btn_panel = QtWidgets.QGroupBox("图像文件选择")
hboxlayout = QtWidgets.QHBoxLayout()
hboxlayout.addWidget(self.path_label)
hboxlayout.addWidget(select_btn)
hboxlayout.addStretch(1)
btn_panel.setLayout(hboxlayout)
self.image_label.setAlignment(QtCore.Qt.AlignCenter) # label上的内容居中显示
self.image_label.setStyleSheet("background-color:pink;color:green") # 背景颜色设置
panel1 = QtWidgets.QWidget()
hbox3 = QtWidgets.QHBoxLayout()
hbox3.addWidget(comboxPanel)
# hbox3.addStretch(1)
hbox3.addWidget(paramPanel)
hbox3.addStretch(1)
panel1.setLayout(hbox3)
vboxlayout = QtWidgets.QVBoxLayout()
vboxlayout.addWidget(panel1)
vboxlayout.addWidget(self.image_label)
vboxlayout.addWidget(btn_panel)
vboxlayout.addStretch(1)
self.setLayout(vboxlayout)
# 绑定点击
select_btn.clicked.connect(self.on_select_image)
self.win_spinbox.valueChanged.connect(self.on_blur_image)
self.sigma_spinbox.valueChanged.connect(self.on_blur_image)
self.combox.currentIndexChanged.connect(self.on_select_change)
def on_select_change(self):
if self.combox.currentIndex() == 1:
# 做高斯模糊处理
self.on_blur_image()
else:
# 显示原图
fileName = self.path_label.text()
pixmap = QtGui.QPixmap(fileName)
pix = pixmap.scaled(QtCore.QSize(640, 640), QtCore.Qt.KeepAspectRatio) # 自动保持比例放缩方式
self.image_label.setPixmap(pix) # 设置图像显示
def on_blur_image(self):
file_path = self.path_label.text()
file_path = os.path.join('.\\image', file_path.split('/')[-1])
src = cv2.imread(file_path) # BGR
win_size = self.win_spinbox.value() * 2 + 1 # 需要是奇数
sigma = self.sigma_spinbox.value()
blur = cv2.GaussianBlur(src, (win_size, win_size), sigma) # 将BGR转为gray
rbg = cv2.cvtColor(blur, cv2.COLOR_BGR2RGB) # 将BGR转为RGB
h, w, c = src.shape
img = QtGui.QImage(rbg.data, w, h, 3 * w, QtGui.QImage.Format_RGB888)
pixmap = QtGui.QPixmap(img)
pix = pixmap.scaled(QtCore.QSize(640, 640), QtCore.Qt.KeepAspectRatio) # 自动保持比例放缩方式
self.image_label.setPixmap(pix) # 设置图像显示
# self.image_label.setAlignment(QtCore.Qt.AlignCenter) # label上的内容居中显示
# self.image_label.setStyleSheet("background-color:blue;color:green") # 背景颜色设置
def on_select_image(self):
fileinfo = QtWidgets.QFileDialog.getOpenFileName(self, "打开图像文件", ".", "图像文件(*.jpg *.png)")
fileName = fileinfo[0]
if fileName != "":
self.path_label.setText(fileName)
pixmap = QtGui.QPixmap(fileName)
pix = pixmap.scaled(QtCore.QSize(640, 640), QtCore.Qt.KeepAspectRatio) # 自动保持比例放缩方式
self.image_label.setPixmap(pix) # 设置图像显示
# def on_txt_chkbox(self):
# pass
#
# def on_wm_chkbox(self):
# pass
#
# def on_time_chkbox(self):
# pass
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
main_win = QtWidgets.QMainWindow()
main_win.setWindowTitle("计数调节器")
myPanel = SpinBoxPanel()
main_win.setCentralWidget(myPanel)
main_win.setMinimumSize(1080, 720)
main_win.show()
app.exec_()
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析