Python 为什么我不能从不同模块中的类调用此变量?
我已经在Python 3.5中使用了Tkinter。我试图将一个输入框的内容传递给另一个模块,这样我就可以用它做其他事情。我正在制作Tkinter窗口,如下所示:Python 为什么我不能从不同模块中的类调用此变量?,python,class,user-interface,tkinter,global,Python,Class,User Interface,Tkinter,Global,我已经在Python 3.5中使用了Tkinter。我试图将一个输入框的内容传递给另一个模块,这样我就可以用它做其他事情。我正在制作Tkinter窗口,如下所示: import tkinter as tk class GUI(tk.Tk): def __init__(self): tk.Tk.__init__(self) tk.Label(self,text="Testers Name").grid() self.testers_nam
import tkinter as tk
class GUI(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
tk.Label(self,text="Testers Name").grid()
self.testers_name = tk.Entry(self,text="Testers Name").grid()
tk.Label(self,text="Report Name").grid()
self.report_name = tk.Entry(self,text="Report Name").grid()
submitButton = tk.Button(self, text="Test Selected",command=self.query_checkbuttons)
submitButton.grid()
def query_checkbuttons(self):
some_stuff_blah_blah_blah
if __name__ == "__main__":
gui = GUI()
print(gui.report_name)
gui.mainloop()
def myFirstPage(canvas, doc):
import gui
print(gui.report_name)
canvas.saveState()
canvas.setFont('Times-Bold',16)
canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-108, Title)
canvas.setFont('Times-Roman',9)
canvas.drawString(inch, 0.75 * inch, "First Page / %s" % pageinfo)
canvas.restoreState()
所以,这是可行的。至少,print
调用\uuuuu main\uuuu
报告None
,并且没有错误
我有另一个名为pdf.py的模块,其中有一个调用,当我尝试拉入report\u name
时失败,如下所示:
import tkinter as tk
class GUI(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
tk.Label(self,text="Testers Name").grid()
self.testers_name = tk.Entry(self,text="Testers Name").grid()
tk.Label(self,text="Report Name").grid()
self.report_name = tk.Entry(self,text="Report Name").grid()
submitButton = tk.Button(self, text="Test Selected",command=self.query_checkbuttons)
submitButton.grid()
def query_checkbuttons(self):
some_stuff_blah_blah_blah
if __name__ == "__main__":
gui = GUI()
print(gui.report_name)
gui.mainloop()
def myFirstPage(canvas, doc):
import gui
print(gui.report_name)
canvas.saveState()
canvas.setFont('Times-Bold',16)
canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-108, Title)
canvas.setFont('Times-Roman',9)
canvas.drawString(inch, 0.75 * inch, "First Page / %s" % pageinfo)
canvas.restoreState()
我已经尝试了我能想到的一切。让我们看看,怎么样:
print(gui.gui.report_name)
print(gui.report_name)
print(gui.report_name.get())
print(gui.GUI.report_name)
print(gui.GUI().report_name)
print(gui.GUI().report_name.get())
我已经在\uuuu main\uuuu
调用中进行了gui
全局进出
我在pdf.py中的不同地方都这样做过:
import gui
from gui import *
from gui import gui
from gui import GUI
再加上最后一批电话的排列……什么都不起作用
我可以在它自己的模块中打印它,但我无法让它显示在那里之外。如何执行此操作?if _; name _;块的整个要点是仅在直接运行该文件时执行其内容,而不是在导入该文件时执行。因此,如果您确实希望导入
gui
实例,则不应在该块中创建它。不完全确定,但我猜您的问题与以下行有关
if __name__ == "__main__":
这意味着您的类GUI
没有像在[0]中看到的那样被实例化。移动GUI
类的创建,即使用以下代码段
import tkinter as tk
class GUI(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
tk.Label(self,text="Testers Name").grid()
self.testers_name = tk.Entry(self,text="Testers Name").grid()
tk.Label(self,text="Report Name").grid()
self.report_name = tk.Entry(self,text="Report Name").grid()
submitButton = tk.Button(self, text="Test Selected",command=self.query_checkbuttons)
submitButton.grid()
def query_checkbuttons(self):
some_stuff_blah_blah_blah
gui = GUI()
print(gui.report_name)
gui.mainloop()
至少允许您从该模块导入变量gui
但是,我强烈建议不要在模块末尾实例化该类,因为每次导入该模块时都会重新实例化该类
EDIT1: 我会这样做:
thiscode.py
import tkinter as tk
class GUI(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
tk.Label(self,text="Testers Name").grid()
self.testers_name = tk.Entry(self,text="Testers Name").grid()
tk.Label(self,text="Report Name").grid()
self.report_name = tk.Entry(self,text="Report Name").grid()
submitButton = tk.Button(self, text="Test Selected",command=self.query_checkbuttons)
submitButton.grid()
def query_checkbuttons(self):
some_stuff_blah_blah_blah
def start_gui():
gui = GUI()
# print(gui.report_name)
gui.mainloop()
if __name__ == "__main__":
start_gui()
def myFirstPage(canvas, doc):
import gui
gui.start_gui() # --> manually open up the gui after import <--
# print(gui.report_name)
canvas.saveState()
canvas.setFont('Times-Bold',16)
canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-108, Title)
canvas.setFont('Times-Roman',9)
canvas.drawString(inch, 0.75 * inch, "First Page / %s" % pageinfo)
canvas.restoreState()
然后在pdf.py
import tkinter as tk
class GUI(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
tk.Label(self,text="Testers Name").grid()
self.testers_name = tk.Entry(self,text="Testers Name").grid()
tk.Label(self,text="Report Name").grid()
self.report_name = tk.Entry(self,text="Report Name").grid()
submitButton = tk.Button(self, text="Test Selected",command=self.query_checkbuttons)
submitButton.grid()
def query_checkbuttons(self):
some_stuff_blah_blah_blah
def start_gui():
gui = GUI()
# print(gui.report_name)
gui.mainloop()
if __name__ == "__main__":
start_gui()
def myFirstPage(canvas, doc):
import gui
gui.start_gui() # --> manually open up the gui after import <--
# print(gui.report_name)
canvas.saveState()
canvas.setFont('Times-Bold',16)
canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-108, Title)
canvas.setFont('Times-Roman',9)
canvas.drawString(inch, 0.75 * inch, "First Page / %s" % pageinfo)
canvas.restoreState()
def myFirstPage(画布、文档):
导入gui
gui.start_gui()#-->导入后手动打开gui,使变量与模块同名有时可能是个坏主意。将变量gui
更改为app
,但仍然会得到相同的错误:属性错误:模块“gui”没有属性“app”
毫无疑问!这是我以前尝试过的另一件事,但正如你所说,当它被导入时,另一个tkinter窗口打开,这是不好的。我通过调用python thiscode.py
(您显示的脚本)来启动这个程序,它有\uuuuuuu main\uuuuu
功能。正如您所指出的,这是不起作用的,但是我应该怎么做才能启动tkinter窗口,而不是在每次将模块导入另一个模块时重新打开另一个窗口?嘿,Brocolli Rob!我更新了我的答案,见我的**EDIT1**。嗨,托马斯…这看起来更好,但是在调用pdf.py
之前很久就需要打开GUI了…这仍然会打开GUIHey@BrocolliRob的两个IStance,然后您可以通过python thiscode.py
直接用GUI调用python脚本,这将打开此GUI的一个实例。此外,我想到,为了拥有一个全局GUI类,还可以使用类属性和方法。