当我将main函数和gui代码组合在一起时,我很难使用文件处理。我是OOP和GUI(TKinter)的新手。我希望我的程序有一个按钮,然后打开一个文件。然后这个文件将在main()函数中使用,然后它完成任务。以下是代码的一部分:
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])])
所以我想删除 with open(" LotData1.txt"," r")作为fp:,它应该使用我用Gui选择的文件。如果有人有兴趣,这里是完整的代码。 http://pastebin.com/PGdXk8Bx
我使用with open函数的原因是因为我试图查看我的main()函数是否有效以及是否计算输出所需的东西,然后我尝试用TKinter实现它。
答案 0 :(得分:1)
关于访问在类方法中打开的文件名的具体问题的答案是:a)使用getopenfilename
而不是getopenfile
,以及b)将文件名保存为类的属性:
def OpenFile(self):
self.inputFile = tkFileDialog.askopenfilename()
这样,只要您需要文件名,代码中的任何其他位置都可以使用self.inputFile
。
答案 1 :(得分:0)
askopenfilename返回文件的路径。所以我不知道为什么你使用紧密的手柄?会出错吗?
def OpenFile(self):
inputFile = tkFileDialog.askopenfile()
main(inputFile)
def main(Filename):
with open (Filename, "r") as fp:
您可以使用班级
答案 2 :(得分:-2)
回答python 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来学习“OOP”,因为pythonic方式是......好pythonic。
<强> GUI 强>
图形用户界面GUI就是这样。没有更多,没有别的。 存在大量框架,TKinter是其中之一,QT是另一个,而Visual 语言是第三个,其中最后一个是微软的东西,而不是python友好的。
Tkinter是...... 特殊我不建议那些试图学习如何创建GUI的人。话虽这么说,它可以非常灵活,并附带python,所以它在某些情况下可用,并有权在那里..
Hay不要生我的气,我喜欢Tkinter,但我了解到大多数人会支持我以前的评论。
特定于代码的Q和A
你打算如何运行任何东西? 你正在定义一个类,一个名为“main”的函数,但这不是“C”,所以main实际上从未运行...
你打算在哪里启动GUI,我只能看到用于修改GUI的代码,包装一些东西......
该计划应该做什么? 听起来像你不想将文件中的文本作为python代码导入,然后运行它?