【问题标题】:File Handling in GuiGui 中的文件处理
【发布时间】:2015-05-27 13:32:02
【问题描述】:

当我结合我的主要功能和 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") as fp: 它应该使用我在 Gui 中选择的文件。如果有人感兴趣,这是完整的代码。 http://pastebin.com/PGdXk8Bx

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

【问题讨论】:

  • 你用的是哪个版本的python?
  • 嗨,我使用的是 Python 2.7。
  • 不清楚你想要什么。您是否希望您的班级获取文件 name,或者您是否希望它打开文件并将文件 handle 传递给主函数(或其他函数) ?

标签: python tkinter file-handling


【解决方案1】:

关于访问在类的方法中打开的文件名的具体问题的答案是 a) 使用 getopenfilename 而不是 getopenfile,并且 b) 将文件名保存为类的属性:

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

这样,您可以在代码中的任何其他地方使用self.inputFile,只要您需要文件名。

【讨论】:

    【解决方案2】:

    askopenfilename 返回文件的路径。所以我不知道你为什么使用关闭手柄?是不是出错了?

    def OpenFile(self):
        inputFile = tkFileDialog.askopenfile()
        main(inputFile)
    
    def main(Filename):
        with open (Filename, "r") as fp:
    

    你可以使用类

    【讨论】:

    • askopenfilename 返回一个文件名,但他们没有调用askopenfilename。 OP 正在调用askopenfile,它返回一个文件句柄。
    • 抱歉没看到,使用'inputFile'有'fp',你可以删除'with open'
    【解决方案3】:

    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 就是这样。仅此而已。 存在多种框架,TKinter 是其中之一,QT 是其中之一,Visual language 是第三个,最后一个是微软的东西,而不是 python 友好的。

    Tkinter 是... 特别的 我不会向试图学习如何创建 GUI 的人推荐它。话虽如此,它可以非常灵活,并且与 python 一起提供,所以它在某些情况下是可用的,并且有权在那里..

    别生我的气,我喜欢 Tkinter,但我知道大多数人会支持我之前的评论。

    代码特定的 Q 和 A

    你打算如何运行任何东西? 您正在定义一个类和一个名为“main”的函数,但这不是“C”,因此 main 永远不会真正运行......

    你打算从哪里启动 GUI,我只能看到修改 GUI 的代码,通过打包一些东西......

    程序应该做什么? 在我看来,您并不想将文件中的文本实际导入为 python 代码并运行它?

    【讨论】:

    • 我认为 '不要试图通过学习 python 来学习“OOP”' 是糟糕的建议。 Python 是学习 OOP 的绝佳语言。我还认为“我不会向试图学习如何创建 GUI 的人推荐它” 是特别糟糕的建议。 Tkinter 绝对是一种了解 GUI 的奇妙方式。开销很小,它提供了所有 GUI 工具包的大部分基本功能。 tkinter 很容易上手,你可以从中学到很多东西。
    • 我一直在教它。我发现先学 C# 或 java 更容易。因此我非常个人的评论
    猜你喜欢
    • 2012-09-12
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多