• PyQt项目实战1


     转载

    pyqt5:利用QFileDialog从本地选择图片\文本文档显示到label、保存图片\label文本到本地(附代码)_pyqt5中qfiledialog.getopenfileurl-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/tensixchuan/article/details/1057178331、QtDesigner的控件摆设完成后,可以定义函数设置其功能,再通过关联函数将控件与其对应的函数联系在一起。

    1. from PyQt5 import QtCore, QtGui, QtWidgets
    2. from PyQt5.QtWidgets import QFileDialog, QApplication
    3. class Ui_MainWindow(object):
    4. def setupUi(self, MainWindow):
    5. MainWindow.setObjectName("MainWindow")
    6. MainWindow.resize(800, 600)
    7. self.centralwidget = QtWidgets.QWidget(MainWindow)
    8. self.centralwidget.setObjectName("centralwidget")
    9. # pushButton_openImage
    10. self.pushButton_openImage = QtWidgets.QPushButton(self.centralwidget)
    11. self.pushButton_openImage.setGeometry(QtCore.QRect(60, 40, 75, 23))
    12. self.pushButton_openImage.setObjectName("pushButton_openImage")
    13. # pushButton_openImage
    14. self.pushButton_saveImage = QtWidgets.QPushButton(self.centralwidget)
    15. self.pushButton_saveImage.setGeometry(QtCore.QRect(60, 90, 75, 23))
    16. self.pushButton_saveImage.setObjectName("pushButton_saveImage")
    17. # pushButton_openImage
    18. self.pushButton_openDirectory = QtWidgets.QPushButton(self.centralwidget)
    19. self.pushButton_openDirectory.setGeometry(QtCore.QRect(60, 200, 75, 23))
    20. self.pushButton_openDirectory.setObjectName("pushButton_openDirectory")
    21. # pushButton_openFile
    22. self.pushButton_openFile = QtWidgets.QPushButton(self.centralwidget)
    23. self.pushButton_openFile.setGeometry(QtCore.QRect(60, 280, 75, 23))
    24. self.pushButton_openFile.setObjectName("pushButton_openFile")
    25. # pushButton_saveImage
    26. self.pushButton_saveFile = QtWidgets.QPushButton(self.centralwidget)
    27. self.pushButton_saveFile.setGeometry(QtCore.QRect(60, 340, 75, 23))
    28. self.pushButton_saveFile.setObjectName("pushButton_saveFile")
    29. self.label_imagePath = QtWidgets.QLabel(self.centralwidget)
    30. self.label_imagePath.setGeometry(QtCore.QRect(600, 80, 54, 12))
    31. self.label_imagePath.setObjectName("label_imagePath")
    32. self.label_directoryPath = QtWidgets.QLabel(self.centralwidget)
    33. self.label_directoryPath.setGeometry(QtCore.QRect(170, 210, 54, 12))
    34. self.label_directoryPath.setObjectName("label_directoryPath")
    35. self.label_filePath = QtWidgets.QLabel(self.centralwidget)
    36. self.label_filePath.setGeometry(QtCore.QRect(170, 290, 54, 12))
    37. self.label_filePath.setObjectName("label_filePath")
    38. self.label_txt = QtWidgets.QLabel(self.centralwidget)
    39. self.label_txt.setGeometry(QtCore.QRect(170, 339, 281, 161))
    40. self.label_txt.setStyleSheet("border: 1px solid black;")
    41. self.label_txt.setObjectName("label_txt")
    42. self.label_image = QtWidgets.QLabel(self.centralwidget)
    43. self.label_image.setGeometry(QtCore.QRect(170, 30, 281, 131))
    44. self.label_image.setStyleSheet("border: 1px solid black;")
    45. self.label_image.setObjectName("label_image")
    46. self.label_image.raise_()
    47. # self.label_image = QtWidgets.QLabel(self.centralwidget)
    48. # self.label_image.setGeometry(QtCore.QRect(200, 50, 321, 231))
    49. # self.label_image.setFrameShape(QtWidgets.QFrame.Box)
    50. # self.label_image.setObjectName("label_image")
    51. # self.label_image.setScaledContents(True) # 图片填充整个框
    52. self.pushButton_openImage.raise_()
    53. self.pushButton_saveImage.raise_()
    54. self.pushButton_openDirectory.raise_()
    55. self.pushButton_openFile.raise_()
    56. self.pushButton_saveFile.raise_()
    57. self.label_imagePath.raise_()
    58. self.label_directoryPath.raise_()
    59. self.label_filePath.raise_()
    60. self.label_txt.raise_()
    61. MainWindow.setCentralWidget(self.centralwidget)
    62. self.menubar = QtWidgets.QMenuBar(MainWindow)
    63. self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
    64. self.menubar.setObjectName("menubar")
    65. MainWindow.setMenuBar(self.menubar)
    66. self.statusbar = QtWidgets.QStatusBar(MainWindow)
    67. self.statusbar.setObjectName("statusbar")
    68. MainWindow.setStatusBar(self.statusbar)
    69. self.retranslateUi(MainWindow)
    70. QtCore.QMetaObject.connectSlotsByName(MainWindow)
    71. # 关联函数
    72. self.pushButton_openImage.clicked.connect(self.openImage)
    73. self.pushButton_saveImage.clicked.connect(self.saveImage)
    74. self.pushButton_openFile.clicked.connect(self.openTextFile)
    75. self.pushButton_saveFile.clicked.connect(self.saveTextFile)
    76. self.pushButton_openDirectory.clicked.connect(self.openDirectory)
    77. def retranslateUi(self, MainWindow):
    78. _translate = QtCore.QCoreApplication.translate
    79. MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    80. self.pushButton_openImage.setText(_translate("MainWindow", "打开图像"))
    81. self.pushButton_saveImage.setText(_translate("MainWindow", "保存图像"))
    82. self.pushButton_openDirectory.setText(_translate("MainWindow", "打开文件夹"))
    83. self.pushButton_openFile.setText(_translate("MainWindow", "打开文件"))
    84. self.pushButton_saveFile.setText(_translate("MainWindow", "保存文件"))
    85. self.label_imagePath.setText(_translate("MainWindow", "图片路径"))
    86. self.label_directoryPath.setText(_translate("MainWindow", "文件夹路径"))
    87. self.label_filePath.setText(_translate("MainWindow", "文件路径"))
    88. self.label_txt.setText(_translate("MainWindow", "文本内容"))
    89. self.label_image.setText(_translate("MainWindow", "图片"))
    90. '''
    91. 1.打开本地图片
    92. QFileDialog.getOpenFileName()返回值有两个,第一个是选择文件的文件名(文件路径),我们可以通过这个文件名打开本地文件,第二个是选择文件的类型
    93. 有4个参数,第一个参数一般是self,第2个参数是弹出框的标题,第3个参数是打开对话框的默认地址,第4个参数是过滤字符串,一般用来限制文件类型,定义打开
    94. 文件下拉框中的可选列表,并且不同的文件类型用两个分号;;隔开
    95. '''
    96. def openImage(self): # 选择本地图片上传
    97. global imgName # 这里为了方便别的地方引用图片路径,我们把它设置为全局变量
    98. imgName, imgType = QFileDialog.getOpenFileName(self.centralwidget, "打开图片", "",
    99. "*.jpg;;*.png;;All Files(*)") # 弹出一个文件选择框,第一个返回值imgName记录选中的文件路径+文件名,第二个返回值imgType记录文件的类型
    100. jpg = QtGui.QPixmap(imgName).scaled(self.label_image.width(),
    101. self.label_image.height()) # 通过文件路径获取图片文件,并设置图片长宽为label控件的长宽
    102. self.label_image.setPixmap(jpg) # 在label控件上显示选择的图片 点击控件选择文件
    103. self.label_imagePath.setText(imgName) # 显示所选图片的本地路径 就是大大的黑色方框
    104. '''
    105. 2.保存图片到本地
    106. 首先还是打开一个保存文件的弹出框,然后保存图片到刚刚选择的路径,这里保存有两种思路
    107. 第一种是记录要保存图片原来的路径,获取到图片实例,然后把图片写入选择的路径
    108. 第二种是把图片所在label控件屏幕截图,然后保存截图(我觉得这个比较简单)
    109. '''
    110. def saveImage(self): # 保存图片到本地
    111. screen = QApplication.primaryScreen()
    112. pix = screen.grabWindow(self.label_image.winId())
    113. fd, type = QFileDialog.getSaveFileName(self.centralwidget, "保存图片", "", "*.jpg;;*.png;;All Files(*)")
    114. pix.save(fd)
    115. '''
    116. 3.打开文件夹
    117. '''
    118. def openDirectory(self): # 打开文件夹(目录)
    119. fd = QFileDialog.getExistingDirectory(self.centralwidget, "选择文件夹", "")
    120. self.label_directoryPath.setText(fd)
    121. '''
    122. 4.打开本地文本文件并显示
    123. '''
    124. def openTextFile(self): # 选择文本文件上传
    125. fd, fp = QFileDialog.getOpenFileName(self.centralwidget, "选择文件", "", "*.txt;;All Files(*)")
    126. f = open(fd, 'r')
    127. self.label_txt.setText(f.read())
    128. self.label_filePath.setText(fd)
    129. f.close()
    130. '''
    131. 5.保存文本到本地
    132. '''
    133. def saveTextFile(self): # 保存文本文件
    134. fd, fp = QFileDialog.getSaveFileName(self.centralwidget, "保存文件", "", "*.txt;;All Files(*)")
    135. f = open(fd, 'w')
    136. f.write(self.label_txt.text())
    137. f.close()
    138. if __name__ == "__main__":
    139. import sys
    140. app = QtWidgets.QApplication(sys.argv)
    141. formObj = QtWidgets.QMainWindow()
    142. ui = Ui_MainWindow()
    143. ui.setupUi(formObj)
    144. formObj.show()
    145. sys.exit(app.exec_())

    2.自己设置好后点击按钮没反应的原因是:

    少了这一行代码:

    from PyQt5.QtWidgets import QFileDialog, QApplication

  • 相关阅读:
    手写签名功能(vue3)
    C++基础——多态
    Blueprints - 虚幻中的行为树(Behavior Tree)
    C语言:贪吃蛇游戏(万字解读超详细)
    Python 物联网之用于基于 TinyFlux的物联网和分析应用程序的微型时间序列数据库
    JVS低代码权限管控方式
    “蔚来杯“2022牛客暑期多校训练营6 A题: Array
    Variable-Length Subsequence Clustering in Time Series(TKDE)
    开发工具:推荐一款非常好用的SSH客户端WindTerm
    Datawhale学习笔记AI +新能源:电动汽车充电站充电量预测
  • 原文地址:https://blog.csdn.net/llf000000/article/details/133988725