你好我们创建了一个gui程序UBT我有一个问题就是我想要使用多个程序然后将它们传递给其他程序:
from tkinter import *
import os
import variables as v
import functions as f
#Functions :
#Configuration of the window
root=Tk()
root.configure(bg=v.bg_color)
root.geometry(v.resolution)
root.title(v.title)
#G.U.I.
#Message :
message = Label(root, text="Choose your category:", anchor=W,bg=v.bg_color)
message.pack(fill=X)
#Category Buttons :
frame=Frame(root)
hard_button=Button(frame, text="Hardware",bg=v.bg_color,command=f.Hardware)
hard_button.config()
hard_button.pack(side=LEFT)
root.mainloop()
这是你在行中看到的那一部分:
hard_button=Button(frame, text="Hardware",bg=v.bg_color,command=f.Hardware)
在命令中,我有一个f.Hardware命令,这是我的问题f.Hardware是我在python中导入的另一个程序,以保持一切美观和整洁。但我有一个问题看起来如下:
import os
import variables as v
import tkinter as tk
import gui as g
def new_hard_window():
g.root.destroy()
def Hardware():
new_hard_window()
hard_path=os.chdir(v.path+"Hardware")
print(os.listdir(hard_path))
我知道第一个功能中的一个错误,第二个是第二个中的第一行,但我不知道如何解决它。如果您想在系统中运行代码,那么我还提供了另一个名为变量的文件。非常感谢你们!
path="N:\Python_Programming\Hangman\\"
bg_color="#FFFFFF"
resolution="200x90"
title="Hangman"
随意更改路径:-P
答案 0 :(得分:1)
问题在于,当您从命令行运行python文件时,python解释器会对它进行不同的处理。您可以通过在同一目录中创建两个文件进行试验,如下所示:
a.py
import b
print('Import %s' % __name__)
b.py
import a
print('Import %s' % __name__)
现在,如果您运行python a.py
,您将获得:
Import a
Import b
Import __main__
为什么呢?因为python为它正在执行的文件创建一个名为__main__
的新模块。该文件的第一件事是导入b
,导入a
。因为此时a.py
作为模块导入,而不是直接运行,所以python为它创建了一个名为a
的新模块。所以现在你有两个来自同一个文件的模块,一个叫__main__
,一个叫a
。
继续,__main__
已导入导入b
的{{1}}。我们现在正在a
执行。由于a.py
已经导入为b
,因此不需要重新导入,因此我们进入下一行,即打印b
的名称和第一行输出是a
。现在这个文件已经完成,所以我们回到Import a
,然后输出b
。然后就完成了,我们回到Import b
,它正在执行__main__
中的代码(但是是一个名为a.py
的独立模块!),因此我们输出__main__
。
您的问题是您有类似的循环导入:Import __main__
(我假设您直接从命令行运行gui
)导入python gui.py
和{{1}然后重新导入 functions
。但是,对于上面的functions
gui
案例,实际上第一个a.py
被加载到名为b.py
的模块中,因此当gui
导入{{1}时它创建一个名为__main__
的新模块,然后执行functions
中的所有代码以填充新的gui
模块。
现在我们有三个模块:gui
,它仍在执行第4行gui
,gui
执行第4行__main__
。因此,我们执行所有import functions as f
以填充functions
模块,当我们到达第4行时,我们已导入import gui as g
,因此我们不会执行gui.py
。但是,因为我们仅在gui
的第4行,我们尚未在functions
中创建函数,即functions.py
和functions
。因此,当我们到达第19行时:
functions
{p> new_hard_window
在Hardware
又名hard_button=Button(frame, text="Hardware",bg=v.bg_color,command=f.Hardware)
模块中尚不存在,因为我们尚未进入该行代码。所以这失败了。
你真正的问题是你试图同时使用python文件作为脚本和模块 。重构您的代码,以便脚本仅用作脚本而不是同时用作模块。