>

UTM 좌표의 .txt 파일을 읽고 시계 반대 방향으로 정렬하고 matplotlib를 사용하여 그래프에 좌표를 표시 한 다음 바탕 화면의 .txt 파일에 좌표를 쓰는 Python 3.6 프로그램을 작성했습니다. 스파이더에서 실행할 때 잘 작동합니다. 이는 IDE입니다.하지만 cx_Freeze (파이썬 파일을 작성하여)를 사용하여 exe로 변환하고 실행하려고하면 다음 오류가 발생합니다.     ModuleNotFoundError : 'matplotlib.backends.backend_qt5agg'라는 모듈이 없습니다. 다음을 수행하여 Qt5 백엔드 설치를 시도했습니다.     pip install PyQt5 cx_Freeze뿐만 아니라 업데이트. 도움을 주시면 감사하겠습니다. 저는 여전히 파이썬뿐만 아니라 일반적인 프로그래밍 초보자입니다. 그래서 외식에 대해 명확하지 않은 경우 사과드립니다. 아래는 기본 Python 스크립트에 대한 코드입니다.

import matplotlib
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
import math as math
import tkinter as tk
from tkinter.filedialog import askopenfilename
import time

def findFilename():
    root = tk.Tk()
    #root.withdraw()
    filename = askopenfilename()
    root.destroy()
    return(filename)
def findSize(cnt, filename):
    #number of lines in file
    with open(filename) as f:
        for line in f:
            cnt = cnt+1;
    return cnt;
def findChar(filename):
    file = open(filename, "r")
    char = ""
    lines = file.read()
    if(lines.find(" ") == -1):
        char = ","
    else:
        char = " "
    return(char)

def inputArr(cnt, arrX, arrY, arrZ, filename, char):
    file = open(filename, "r")
    num1 = 0
    num2 = 0
    num3 = 0
    place1 = 0
    place2 = 0
    place3 = 0

    for i in range(0, cnt):
        num = file.readline()
        place1 = num.find(char)
        num1 = num[:place1]
        num = num[place1 + 1:]
        place2 = num.find(char)
        num2 = num[:place2]
        num = num[place2+1:]
        place3 = num.find(char)
        num3 = num[:place3]
        arrX.append(float(num1))
        arrY.append(float(num2))
        arrZ.append(float(num3))
    return(arrX, arrY, arrZ)
def drawPath(arrX, arrY, label, cnt):
    plt.plot(arrX, arrY, '-ok', color = 'red')
    plt.xlabel("X coordinates")
    plt.ylabel("Y coordinates")
    plt.title("Loop path")
    plt.show()

    for i in range(0,cnt):
        label.append(str(i))
    for i, txt in enumerate(label):
        plt.annotate(txt, (arrX[i], arrY[i]))

def findCenter(arrX, arrY, cnt):
    xCenter = 0
    yCenter = 0
    for i in range(0,cnt):
        xCenter += arrX[i]
        yCenter += arrY[i]

    xCenter /= cnt
    yCenter /= cnt
    return(xCenter, yCenter)
def moveToCenter(arrX, arrY, arrX1, arrY1, xCenter, yCenter, cnt):
    for i in range(0,cnt):
        arrX1.append(arrX[i] - xCenter)
        arrY1.append(arrY[i] - yCenter)
    return(arrX1, arrY1)
def calculateTheta(arrX1, arrY1, arrTheta, cnt):
    for i in range(0,cnt):
        arrTheta.append(math.atan2(arrY1[i], arrX1[i]))
  #  print(arrTheta[0])
    return(arrTheta)
def sortPoints(arrTheta, arrX, arrY, arrZ, cnt):
    minimum = 0
    for i in range(0,cnt-1):
        minimum = i
        for j in range(i + 1, cnt):
            if(arrTheta[j] < arrTheta[minimum]):
                minimum = j
        arrTheta[minimum], arrTheta[i] = arrTheta[i], arrTheta[minimum]
        arrX[minimum], arrX[i] = arrX[i], arrX[minimum]
        arrY[minimum], arrY[i] = arrY[i], arrY[minimum]
        arrZ[minimum], arrZ[i] = arrZ[i], arrZ[minimum]
def writeFile(arrX, arrY, arrZ, cnt, char):
    moment = time.strftime("%Y-%b-%d__%H_%M_%S",time.localtime())
    file = open("C:\\Users\\natha\\Desktop\\sorted" + str(moment) + ".txt", "w")
    num = ""
    for i in range(0,cnt):
        if(i < 10):
            num = "0"
        else:
            num = ""
        file.write("<" + "L" + num + str(i) + ">" + " " + str(arrX[i]) + char + 
                   str(arrY[i]) + char + str(arrZ[i]) + char + "\n")


def main():
    cnt = 0
    arrX = []
    arrY = []
    arrZ = []
    label = []
    arrX1 = []
    arrY1 = []
    arrTheta = []
    xCenter = 0
    yCenter = 0
    char = ""
    filename = findFilename()
    char = findChar(filename)
    cnt = findSize(cnt, filename)
    findChar(filename)
    inputArr(cnt, arrX, arrY, arrZ, filename, char)
    xCenter, yCenter = findCenter(arrX, arrY, cnt)
    arrX1, arrY1 = moveToCenter(arrX, arrY, arrX1, arrY1, xCenter, yCenter, cnt)
    arrTheta = calculateTheta(arrX1, arrY1, arrTheta, cnt)
    #arrX, arrY, arrZ = randomPoints(arrX, arrY, arrZ, cnt)
    sortPoints(arrTheta, arrX, arrY, arrZ, cnt)
    writeFile(arrX, arrY, arrZ, cnt, char)
    drawPath(arrX, arrY, label, cnt)

main()

setup.py 파일뿐만 아니라

from cx_Freeze import setup, Executable
import sys
import os.path

os.environ['TCL_LIBRARY'] = r'C:\Users\natha\Anaconda3\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Users\natha\Anaconda3\tcl\tk8.6'
additional_mods = ['numpy.core._methods', 'numpy.lib.format']
setup(name='loopProgram', 
      version='0.4', 
      description='xyz script',
      options = {'build_exe': {'includes': additional_mods}},
      executables = [Executable('loopProgram.py')]
    )


  • 답변 # 1

    누락 된 matplotlib qt5 백엔드 설치      sudo apt-get 설치 python-matplotlib-qt5

    Matplotlib 설정 파일 경로를 가져옵니다 :     파이썬     가져 오기 matplotlib     matplotlib.matplotlib_fname ()     u '/ usr/lib64/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc' 구성 파일에서 백엔드를 qt5agg로 변경하십시오.     vi /usr/lib64/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc

    줄을 다음으로 변경하십시오 :

    백엔드 : qt5agg

  • 답변 # 2

    다음 줄을 추가하려고 했습니까?

    import matplotlib.backends.backend_qt5agg
    
    

    주 파이썬 스크립트 (또는 스크립트에서 사용되는 다른 적절한 모듈)에서이 모듈을 포함하도록 cx_Freeze를 "강제"합니까?

  • 답변 # 3

    OpenSUSE의 경우 위의 답변이 작동하지 않는 것으로 나타났습니다 . 다양한 백엔드를 모두 시도했지만 아무것도 표시되지 않았습니다. 스크립트 실행 중 오류가 발생하지 않았으며 plot.show () 함수가 콘솔을 차단하지도 않았습니다. 와이즈 비즈  이 글에서 설명 된 것처럼 올바르게 사용될 때 문제없이 작동했습니다

    이 링크는 plot.savefig() 를 추가해야한다는 것을 보여주었습니다.   tk-devel 를 설치하기 전에 . Zypper를 사용하여 matplotlib 를 설치했습니다. , 제거 된 tk-devel matplotlib를 다시 설치하면 저에게 효과적입니다.

    python3-matplotlib

  • 이전 디렉토리와 다른 모듈 이름을 가진 프로젝트를 android studio로 가져 오기
  • 다음 css - "반쪽"측면 모드가있는 각도 재료 사이드 바