Python 获取其他模块中tkinter实例的参数

Python 获取其他模块中tkinter实例的参数,python,class,tkinter,Python,Class,Tkinter,我想创建一个程序,通过GUI执行以下操作: 1.)选择将在其中创建一些新目录的目录 2.)使用条目小部件为这些新目录命名 由于程序相当大,我想把代码分成几个模块,这会给我带来一些问题 到目前为止,我做了以下几件事: 我有一个使用.py的“main”程序 import os, sys import Tkinter import tkFileDialog #import own modules import Gui root = Tkinter.Tk() root.withdraw() di

我想创建一个程序,通过GUI执行以下操作:

1.)选择将在其中创建一些新目录的目录

2.)使用条目小部件为这些新目录命名

由于程序相当大,我想把代码分成几个模块,这会给我带来一些问题

到目前为止,我做了以下几件事:

我有一个使用.py的“main”程序

import os, sys
import Tkinter

import tkFileDialog
#import own modules
import Gui

root = Tkinter.Tk()
root.withdraw()


directory='some path'


tempdir = tkFileDialog.askdirectory(parent=root, initialdir=directory, 
     title='Please choose a location for your directory')

n2=Gui.DirectoryCreator()
n2.mainloop()
模块Gui如下所示

import Tkinter as tk
class DirectoryCreator(tk.Tk):
    text=''
        def __init__(self):
            tk.Tk.__init__(self)
            self.label=tk.Label(self, text='Enter the name of the directory')
            self.entry = tk.Entry(self)
            self.button = tk.Button(self, text="Name Of Folder",width=15, command=self.on_button)
            self.label.grid(row=0,column=0)
            self.button.grid(row=0,column=2)
            self.entry.grid(row=0,column=1)

        def on_button(self):
            text= self.entry.get()
            self.quit()

现在,关键是我需要在模块中使用.py获取字符串“text”的值。如果我尝试类似n2.text的内容,则streering n2.text就是空的,例如n2.text=”“。如何获取此字符串?

在按钮上的
中,使用
self.text=self.entry.get()
。仅仅使用
text
就像声明一个新变量,而不是使用已经绑定到
DirectoryCreator
实例的
text

def on_button(self):
    self.text= self.entry.get()
    self.quit()

当您尝试获取
n2.text
时会发生什么情况?有错误吗?它是否返回
?到底是什么不起作用?是的,它返回n2.text=”“。什么不起作用?我只是不知道如何从using.pyOk中的条目小部件访问条目,这是可行的。但我有点惊讶它居然能起作用。如何定义变量self.text?self不总是指向Tkinter模块的实例吗?如果是,为什么可以声明属于此实例的字符串?我没想到Tkinter对象可以在定义中拥有字符串?除此之外,这只在我将self.text行放在init语句之后时有效?为什么会这样?如果我把它放在前面,我会卡在主循环中,什么也不会发生
self
指的是你的
tk.tk
子类。当您说
self.text=”“
时,您所做的只是在实例上设置一个新属性
text
。这与定义
self.entry=tk.entry()
的方式相同
self.text
只是指向字符串的指针。如果您将其更改为指向任何其他内容,它仍然有效。您可以将
self.text
分配给任何数据类型。它没有选择它可以指向的数据类型。而且,只有我答案的第二段才是真正修复它的内容。第一段仅适用于可变数据类型(字符串是不可变的),因此我将从答案中删除它,因为这里不需要它。您只需在
\uuuu init\uuuu
中为
列表
s和
dict
s等内容定义一个属性。你可以用你在问题中的方式定义文本。如果你把它放在
\uuuu init\uuu
语句之后,你的意思是什么?你说的是
tk.tk.\uuuu init\uuuuuu(self)
表达式吗?是的,这就是我的意思。当我把I放在这句话之前或之后时,情况就不同了。无论如何,非常感谢您的帮助;)