测试文件:
A,598427.816,2994656.273
B,598592.423,2994717.284
C,598629.527,2994944.332
D,598615.402,2995045.744
E,598579.710,2995139.163
F,598544.018,2995232.582
G,598350.461,2995480.785
H,598152.839,2995408.000
I,598181.731,2995204.832
J,598174.761,2994989.071
K,598264.836,2994702.513
请写一段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打包设置界面图标跟任务栏图标:
#1、创建一个名为 “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 sys
from PyQt5.QtWidgets import (
QApplication, QWidget, QTextEdit, QPushButton, QLabel, QMessageBox
)
from PyQt5.QtGui import QIcon
import pyproj
import 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()