importError: Невозможно импортировать имя 'quitprogram' из 'GUIhelperFunction' - PullRequest
0 голосов
/ 21 января 2020

Я сделал 2 py-файла 'Main' и GUIHelperFunctions в одной папке, и я хочу использовать функцию quitprogram из этого модуля в моем main файле, точно так же, как если бы я только что сделал функция в самом файле main. но я получаю

1importError: Невозможно импортировать имя 'quitprogram' из GUIhelperFunction1.

Как мне решить эту проблему?

Мой код в GUIHelperFunctions.py:

    def quitProgram():
        root.quit()

и в моем main.py:

    import numpy as np
    import beam as bm
    import matplotlib.pyplot as plt

    from GUIHelperFunctions import quitProgram
    import tkinter as tk  # tkinter is a GUI implementation Library

    HEIGHT = 480
    WIDTH = 640

    root = tk.TK()

    canvas = tk.Canvas(root, height=HEIGHT, width=WIDTH)
    canvas.pack()

    # Creates a frame where GUI elements are drawn
    frame = tk.Frame(root)
    frame.place(relwidth=1, relheight=0.95)

    # Creating variables that are put into the frame GUI (start up)
    myLabel = tk.Label(frame, text="Deflection of beam Calculator", bg='yellow')


    quit = tk.Button(root, text="quit", bg='#AFAFAF', command=quitProgram)

    myLabel.pack()
    quit.pack()

    root.mainloop()

Редактировать 1:

Я пытался решите это еще немного, и я возвращаюсь к этому error, даже тогда я удостоверяюсь, что это написано, поскольку мой пост делает это. Если я поместил функцию из GUIHelperFunction в мой файл main, программа зависнет.

    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Users\chris\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
        return self.func(*args)
      File "C:\Users\chris\OneDrive\Desktop\code Assignments\Exam Project\GUIHelperFunctions.py", line 8, in quitProgram
    NameError: name 'root' is not defined

Редактировать 2:

Хорошо, остановка произошла из-за использования root.quit() вместо root.destroy(). Вышеуказанная проблема все еще актуальна.

1 Ответ

0 голосов
/ 21 января 2020

Согласно исключению, ваша проблема не в import функции quitProgram, а в самой функции.

NameError: имя 'root' не определено

Когда вы import функция из другого файла, она не знает все основные переменные файла, т.е. (в контексте вашего кода) переменная root не определена в GUIHelperFunctions поэтому он не распознается в функции quitProgram, поэтому его нельзя использовать там -> результаты с исключением NameError.

Я бы предложил следующие изменения, чтобы он работал:

  1. Изменить подпись функции quitProgram:
def quitProgram(root):
    root.destroy()
Вызовите функцию с соответствующим параметром:
quit = tk.Button(root, text="quit", bg='#AFAFAF', command=lambda: quitProgram(root))

См. Как передать аргументы команде Button в Tkinter? для получения дополнительной информации и примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...