• python之pyQt5实例:几何绘图界面


    使用PyQt5设计一个界面,其中点击不同的按钮可以在画布上画出点、直线、圆和样条曲线

    1. from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton,QHBoxLayout,QVBoxLayout,QWidget,QLabel
    2. from PyQt5.QtGui import QPainter, QPen, QColor
    3. from PyQt5.QtCore import Qt
    4. class MainWindow(QMainWindow):
    5. def __init__(self):
    6. super().__init__()
    7. self.setWindowTitle("绘图应用")
    8. self.setGeometry(100, 100, 400, 400)
    9. self.button_point = QPushButton("画点", self)
    10. self.button_line = QPushButton("画直线", self)
    11. self.button_circle = QPushButton("画圆", self)
    12. self.button_curve = QPushButton("画曲线", self)
    13. self.button_point.clicked.connect(self.draw_point)
    14. self.button_line.clicked.connect(self.draw_line)
    15. self.button_circle.clicked.connect(self.draw_circle)
    16. self.button_curve.clicked.connect(self.draw_curve)
    17. # 将按钮添加到布局中
    18. hlayout = QHBoxLayout()
    19. hlayout.addWidget(self.button_point)
    20. hlayout.addWidget(self.button_line)
    21. hlayout.addWidget(self.button_circle)
    22. hlayout.addWidget(self.button_curve)
    23. # 创建画布控件(标签)并设置其占位符文本和样式表(使其不显示边框)
    24. self.canvas = QLabel()
    25. self.canvas.setText('Canvas')
    26. self.canvas.setStyleSheet("border: 0px solid white; background-color: white;")
    27. # self.canvas.setFixedSize(280, 180) # 设置画布大小(示例值)
    28. # 将画布控件添加到布局的底部,并设置其占据主窗口的大部分位置
    29. vlayout = QVBoxLayout()
    30. vlayout.addLayout(hlayout)
    31. vlayout.addWidget(self.canvas)
    32. # 创建一个容器,将其布局设置为垂直布局,并将其添加到主窗口的顶部区域(不使用setCentralWidget)
    33. container = QWidget()
    34. container.setLayout(vlayout)
    35. self.setFixedHeight(220) # 设置主窗口的高度,以适应容器的布局
    36. self.setCentralWidget(container) # 将容器设置为中央窗口部件(中心区域)
    37. def draw_point(self):
    38. # 实现画点功能的方法
    39. pass
    40. def draw_line(self):
    41. # 实现画直线功能的方法
    42. pass
    43. def draw_circle(self):
    44. # 实现画圆功能的方法
    45. pass
    46. def draw_curve(self):
    47. # 实现画曲线功能的方法
    48. pass
    49. def paintEvent(self, event):
    50. painter = QPainter(self)
    51. pen = QPen()
    52. pen.setWidth(2)
    53. painter.setPen(pen)
    54. if self.draw_point_flag:
    55. painter.drawPoint(self.last_pos)
    56. if self.draw_line_flag:
    57. painter.drawLine(self.start_pos, self.end_pos)
    58. if self.draw_circle_flag:
    59. radius = max(abs(self.start_pos.x() - self.end_pos.x()), abs(self.start_pos.y() - self.end_pos.y()))
    60. painter.drawEllipse(self.start_pos, radius, radius)
    61. if self.draw_curve_flag:
    62. # 实现画曲线的方法
    63. pass
    64. def draw_point(self):
    65. self.draw_point_flag = True
    66. self.draw_line_flag = False
    67. self.draw_circle_flag = False
    68. self.draw_curve_flag = False
    69. def draw_line(self):
    70. self.draw_point_flag = False
    71. self.draw_line_flag = True
    72. self.draw_circle_flag = False
    73. self.draw_curve_flag = False
    74. def draw_circle(self):
    75. self.draw_point_flag = False
    76. self.draw_line_flag = False
    77. self.draw_circle_flag = True
    78. self.draw_curve_flag = False
    79. def draw_curve(self):
    80. self.draw_point_flag = False
    81. self.draw_line_flag = False
    82. self.draw_circle_flag = False
    83. self.draw_curve_flag = True
    84. if __name__ == '__main__':
    85. app = QApplication([])
    86. window = MainWindow()
    87. window.show()
    88. app.exec()

  • 相关阅读:
    中秋假期,回不了家的程序员,竟然用Python做了这件事...
    C语言——实用调试技巧——第1篇——(第22篇)
    【《C Primer Plus》读书笔记】第12章:存储类别、链接和内存管理
    经典OJ题:找环节点——代码解析
    2023-IDEA插件推荐
    [附源码]Java计算机毕业设计SSM动物保护资讯推荐网站
    nginx-module-vts监控nginx流量
    关于计算机丢失MSVCP140.dll是什么意思?MSVCP140.dll缺失的5个解决方案分享
    docker
    【Python】模块
  • 原文地址:https://blog.csdn.net/T20151470/article/details/134257543