1. 测试文件
A,598427.816,2994656.273B,598592.423,2994717.284C,598629.527,2994944.332D,598615.402,2995045.744E,598579.710,2995139.163F,598544.018,2995232.582G,598350.461,2995480.785H,598152.839,2995408.000I,598181.731,2995204.832J,598174.761,2994989.071K,598264.836,2994702.513
2. GPT 生成
我:
请写一段 python 代码,我的需求如下:运行程序后弹出一个文本框要求输入多行文字每一行代表一个 epsg4547 参考系坐标,有三个值用逗号隔开第一个值为序号,第二个、第三个值为 epsg4547 参考系坐标GUI 界面上出现 2 个按钮,第一个按钮命名为 “生成 KML”第一个按钮的功能是将这些将这些坐标一一转换成 epsg4326 参考系坐标,将生成后的坐标生成一个能导入谷歌地球的 kml 文件第二个按钮命名为 “生成 KML 多边形”第二个按钮的功能是将这些生成坐标一一转换成 epsg4326 参考系坐标,将生成后的坐标连成一个多边形,将多边形转化成一个能导入谷歌地球的 kml 文件输出这个 kml 文件
生成的代码使用 tkinter,打开的时候有控制台
pyinstaller --onefile --noconsole --icon=1.ico test.py
或者 spec 文件中,将 console=False,打开后无控制台
我:
有 bug 关掉窗口,进程不会退出请将上述代码改造一下,点击按钮之后,弹窗提示用户已生成文件,和文件名使用 pyqt 重构下面的代码:<代码>
pyqt 用 pyinstaller 打包设置界面图标跟任务栏图标:
创建一个名为 “icons.qrc” 的文件,包含以下内容:
<!DOCTYPE RCC><RCC version="1.0"><qresource> <file>icon.png</file></qresource></RCC>#2、使用 pyrcc 工具将 .qrc 文件编译为 Python 模块。在命令行中输入以下命令:pyrcc5 icons.qrc -o icons_rc.py#3、接下来,在你的 PyQt 程序中,你可以使用以下代码来设置应用程序图标和任务栏图标:from PyQt5.QtGui import QIcon
import icons_rc # 导入编译后的 .qrc 文件
app = QApplication(sys.argv)app.setWindowIcon(QIcon(':/icon.png')) # 设置应用程序图标
微调窗口大小,位置
我:
仿 Material 的样式,美化下面的代码:<代码>
优化代码体积(没用)后最终代码:
import sysfrom PyQt5.QtWidgets import ( QApplication, QWidget, QTextEdit, QPushButton, QLabel, QMessageBox)from PyQt5.QtGui import QIconimport pyprojimport simplekml
class CoordinateConverterApp(QWidget): def __init__(self): super().__init__() self.initUI()
def initUI(self): self.setWindowTitle("EPSG-4547") self.setGeometry(100, 100, 400, 300) self.setWindowIcon(QIcon(":/1.png"))
self.text_label = QLabel("请输入坐标(每行一个:序号,X,Y):", self) self.text_label.move(20, 20)
self.text_widget = QTextEdit(self) self.text_widget.setGeometry(20, 50, 360, 160)
self.convert_button = QPushButton("生成KML", self) self.convert_button.setGeometry(20, 230, 150, 30) self.kml_button = QPushButton("生成KML多边形", self) self.kml_button.setGeometry(230, 230, 150, 30)
self.convert_button.clicked.connect(self.generate_kml) self.kml_button.clicked.connect(self.generate_kml_polygon)
self.setStyleSheet(""" QLabel { font-size: 16px; font-weight: bold; } QTextEdit { font-size: 14px; background-color: #f2f2f2; } QPushButton { font-size: 16px; background-color: #2196F3; color: white; border: none; border-radius: 5px; } QPushButton:hover { background-color: #1976D2; } """)
def generate_coordinates(self): input_text = self.text_widget.toPlainText() lines = input_text.split('\n')
coordinates = []
crs_epsg4547 = pyproj.CRS.from_epsg(4547) crs_epsg4326 = pyproj.CRS.from_epsg(4326) transformer = pyproj.Transformer.from_crs(crs_epsg4547, crs_epsg4326, always_xy=True)
for line in lines: parts = line.strip().split(',') if len(parts) == 3: index, coord1, coord2 = parts lon, lat = transformer.transform(float(coord1), float(coord2)) coordinates.append((index, lon, lat))
return coordinates
def generate_kml(self): coordinates = self.generate_coordinates()
kml = simplekml.Kml() for index, lon, lat in coordinates: kml.newpoint(name=index, coords=[(lon, lat)])
kml_file = "output.kml" kml.save(kml_file) QMessageBox.information(self, "生成完成", f"已保存为 {kml_file}")
def generate_kml_polygon(self): coordinates = self.generate_coordinates()
kml = simplekml.Kml() polygon = kml.newpolygon(outerboundaryis=[(lon, lat) for _, lon, lat in coordinates])
polygon.style.linestyle.width = 1 polygon.style.linestyle.color = simplekml.Color.red polygon.style.polystyle.fill = 1 polygon.style.polystyle.color = simplekml.Color.changealphaint(100, simplekml.Color.red)
kml_file = "output_polygon.kml" kml.save(kml_file) QMessageBox.information(self, "生成完成", f"已保存为 {kml_file}")
def main(): app = QApplication(sys.argv) window = CoordinateConverterApp() window.show() sys.exit(app.exec_())
if __name__ == "__main__": main()