序
在上一节的CSDN里,实现了简单的显示。但是没有交互,这一节CSDN,主要就看看怎么交互的。
VAO
看来VAO是能用的。
游戏存档如下:
https://gitee.com/marchand/python-cad-gitee/tree/master/%E6%91%B8%E7%B4%A2%E7%95%8C%E9%9D%A2/2https://gitee.com/marchand/python-cad-gitee/tree/master/%E6%91%B8%E7%B4%A2%E7%95%8C%E9%9D%A2/2
鼠标拖动,滚轮缩放
怎么接受鼠标键盘的消息?
接受鼠标的消息https://blog.csdn.net/fgh1991/article/details/89851327?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165042732416781683944230%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165042732416781683944230&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-89851327.142%5Ev9%5Epc_search_result_cache,157%5Ev4%5Econtrol&utm_term=pyqt5+%E9%BC%A0%E6%A0%87%E9%94%AE%E7%9B%98&spm=1018.2226.3001.4187接受键盘的消息
https://blog.csdn.net/m0_37828248/article/details/79766580?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165042732416781683944230%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165042732416781683944230&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-3-79766580.142%5Ev9%5Epc_search_result_cache,157%5Ev4%5Econtrol&utm_term=pyqt5+%E9%BC%A0%E6%A0%87%E9%94%AE%E7%9B%98&spm=1018.2226.3001.4187
怎么重绘OpenGL窗口?
啥update?update谁?
百度吧
OpenGL与update与pyqt5https://stackoverflow.com/questions/46834303/qglwidget-not-updating-pyqt5-and-opengl平移,缩放,还是滚轮缩放。
鼠标怎么拖动?
pyqt5事件与鼠标事件https://blog.csdn.net/weixin_45553177/article/details/104513333
鼠标拖动https://blog.csdn.net/qq_34765552/article/details/78981044?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165046221216780264034973%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165046221216780264034973&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-78981044.142%5Ev9%5Epc_search_result_cache,157%5Ev4%5Econtrol&utm_term=pyqt5+%E9%BC%A0%E6%A0%87%E6%8B%96%E5%8A%A8&spm=1018.2226.3001.4187PyQt5-如何操作鼠标位置,和跟踪鼠标
https://jingyan.baidu.com/article/656db91843f4b4a381249cd2.htmlHow to draw a rectangle and adjust its shape by drag and drop in PyQt5
https://stackoverflow.com/questions/44468775/how-to-draw-a-rectangle-and-adjust-its-shape-by-drag-and-drop-in-pyqt5控件的局部坐标系如下:
挺好的……拖动移动,滚轮缩放。
至此,OpenGL完全沦为一个绘图工具。。
存档:
实现了鼠标拖动,滚轮缩放https://gitee.com/marchand/python-cad-gitee/tree/master/%E6%91%B8%E7%B4%A2%E7%95%8C%E9%9D%A2/3
pyopengl的引入
pyqt教程里的这个代码。。看不懂。所以就想用pyopengl的,看着比较的熟悉。
参考了下这个
Basics of PyQt5 and PyOpenGLhttps://stackoverflow.com/questions/60234269/basics-of-pyqt5-and-pyopengl没有了一大堆陌生前缀的函数,正常运行。
存档:
用pyopengl代替了pyqt的函数https://gitee.com/marchand/python-cad-gitee/tree/master/%E6%91%B8%E7%B4%A2%E7%95%8C%E9%9D%A2/4
一定的UI交互
为什么叫一定的?因为不复杂,很简陋;不就是一定的吗?
这里其实也就获取一下参数就没了。。用不了多高级的UI。
PyQt5弹出窗口--QInputDialog, QMessageBox, QFileDialoghttps://blog.csdn.net/weixin_50113231/article/details/124102931获取一下数字
import sys
from PyQt5.QtWidgets import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('PyQt5 弹出窗口')
self.resize(400, 300)
# 加了self为全局布局,没加为局部布局
h1 = QHBoxLayout(self)
btn = QPushButton('弹出窗口')
btn.clicked.connect(self.do_btn)
h1.addWidget(btn)
def do_btn(self, event): # 输入:整数
# 后面四个数字的作用依次是 初始值 最小值 最大值 步幅
value, ok = QInputDialog.getInt(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37, -10000, 10000, 2)
print(value)
# # 1为默认选中选项目,True/False 列表框是否可编辑。
# items = ["Spring", "Summer", "Fall", "Winter"]
# value, ok = QInputDialog.getItem(self, "输入框标题", "这是提示信息\n\n请选择季节:", items, 1, True)
# print(value)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
获取一下文件路径
import sys
from PyQt5.QtWidgets import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('PyQt5 弹出窗口')
self.resize(400, 300)
# 加了self为全局布局,没加为局部布局
h1 = QHBoxLayout(self)
btn = QPushButton('弹出窗口')
btn.clicked.connect(self.do_btn)
h1.addWidget(btn)
def do_btn(self, event):
#dir_ = QFileDialog.getExistingDirectory(self, "选取文件夹", "E:/") # 起始路径
# # 设置文件扩展名过滤,注意用双分号间隔
#打开一个文件(获取文件路径)
file_, filetype = QFileDialog.getOpenFileName(self, "选取文件", "E:/", "All Files (*);;Text Files (*.dxf)")
print(file_)
#保存文件
#file_, ok = QFileDialog.getSaveFileName(self, "文件保存", "C:/", "All Files (*);;Text Files (*.txt)")
# #另存文件
# file_, ok = QFileDialog.getSaveFileName(self, "文件另存为", "C:/", "All Files (*);;Text Files (*.txt)")
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
UI做到这个程度,也就够用了。
当窗口大小改变时
这个肯定不行呐……
pyqt控件随窗口大小自适应变化https://blog.csdn.net/whuzhang16/article/details/109384506 设置栅格布局
后记
第一次实现有UI的程序。