2015-05-27 74 views
0

当我将主函数和gui代码结合在一起时,我很难使用文件处理。我对OOP和GUI都很陌生(TKinter)。我想让我的程序有一个按钮并打开一个文件。然后这个文件将被用在main()函数中,然后它完成要执行的任务。下面是代码的一部分:Gui中的文件处理

class GuiFrame1(Frame): 
    def __init__ (self): 
    Frame.__init__(self) 
    self.master.geometry("500x500") 
    self.pack(expand = 1, fill = BOTH) 

    self.FileOpenerButton = Button(self,\ 
     text = "Open File", command = self.OpenFile) 
    self.FileOpenerButton.pack() 

    def OpenFile(self): 
    inputFile = tkFileDialog.askopenfile() 
    inputFile.close() 

def main(): 
    with open ("LotData1.txt", "r") as fp: 
    sideList = [] 
    for i in fp: 
     tmp = i.strip().split() 
     sideList.append([tmp[0], tmp[1], float(tmp[2])]) 

因此,它是像我想与开放(“LotData1.txt”,“R”)作为FP删除并应使用的文件,我选与桂。这是完整的代码,如果有人感兴趣。 http://pastebin.com/PGdXk8Bx

我之所以使用open函数是因为我试图查看我的main()函数是否工作,以及它是否计算输出所需的东西,然后我试图用TKinter实现它。

+0

你正在使用哪个版本的python? – Henrik

+0

嗨,我正在使用Python 2.7。 – Garander

+0

目前尚不清楚你想要什么。你想让你的课得到一个文件_name_,或者你想让它打开文件并将文件_handle_传递给主函数(或其他函数)? –

回答

0

askopenfilename返回文件的路径。所以我不知道你为什么使用密切的手柄?有错误吗?

def OpenFile(self): 
    inputFile = tkFileDialog.askopenfile() 
    main(inputFile) 

def main(Filename): 
    with open (Filename, "r") as fp: 

您可以使用类

+0

'askopenfilename'返回一个文件名,但他们没有调用'askopenfilename'。 OP正在调用'askopenfile',它返回一个文件句柄。 –

+0

抱歉没有看到,使用'inputFile'它是'fp',并且您可以删除'with open' – user2740652

1

回答你的具体问题有关访问一个类的方法打开的文件名是A)使用getopenfilename而不是getopenfile,和b)保存文件名作为属性的类:

def OpenFile(self): 
    self.inputFile = tkFileDialog.askopenfilename() 

就这样,在你的代码其他地方,你可以使用self.inputFile当您需要的文件名。

-2

答案蟒蛇2.7

OOP 课1

有一类与对象之间有很大的区别。 我能想到的最好的比喻是,班级是蛋糕的食谱。该对象是一个蛋糕。

对象和蛋糕

蛋糕类比的逻辑成立的话,只要你可以有对象的多个实例建立一个使用类。 (多个蛋糕,都是由同一配方制成的)

就像对象一样,蛋糕在创建后并不是完全相同的。 (有人吃了我的蛋糕,但避免了你的蛋糕,所以蛋糕是不同的)。

基类继承(或使用标准配方) 说你想烤蓝莓松饼。你挖掘到你的书,并请参阅如下书面配方:

mix together the standard muffin recipe on page 301, but leave out the icing. 
Add 100 blueberrys 

这意味着,一个基本的松饼食谱存在,笔者是懒得写所有常见的东西的两倍。

定义类时,“基类”就是这样。这是标准松饼配方的定义。您可以通过继承基类来创建自己的版本。

OOP 课2

The cake is a lie,至少对于Python编程。 我们谈论类从对象继承.. SO Question on that

所以,请不要尝试通过Python入门学习“面向对象”,因为Python的方式是..好pythonic

GUI

的图形用户界面GUI就是这样。没有其他,没有别的。 存在许多框架,TKinter就是其中之一,QT是另一个,而Visual 语言是第三个,其中最后一个是微软的东西,而不是python友好的。

Tkinter是... 特别我不会推荐它的人试图学习如何创建GUI的。这就是说,它可以是相当灵活的,并与Python发货,所以它可用在某些情况下,并有权在那里..

干草不生我的气,我爱Tkinter,但我了解到大多数人会赞成我以前的评论。

代码的具体问题与

你怎么打算跑什么? 您正在定义一个类和一个名为“main”的函数,但这不是“C”,所以main从未实际运行...

您打算如何启动GUI,我只能看到代码修改一个图形用户界面,通过包装在一些东西...

该程序应该做什么? 这听起来像你不想实际导入文件中的文本作为Python代码,并运行它?

+1

我认为_'don't不要通过学习python来学习“OOP”_是可怕的建议。 Python是学习OOP的好语言。我也认为_“我不会推荐给那些试图学习如何创建GUI的人”_是特别可怕的建议。 Tkinter是学习GUI的绝对方法。开销很小,它提供了所有GUI工具包的大部分基本功能。开始使用tkinter非常简单,您可以从中学到很多东西。 –

+0

我一直在教它..我发现它更容易学习的孩子们C#或Java第一..因此,我非常个人的评论 – Henrik