【问题标题】:Python: Pass variable defined in method of one class in one file to another seperate filePython:将一个文件中一个类的方法中定义的变量传递给另一个单独的文件
【发布时间】:2015-03-26 06:35:35
【问题描述】:

我使用 wxpython 创建了一个名为“WindowClass”的类。它有几种方法,包括以下三种:

def onOpenFile(self, event):
    dlg = wx.FileDialog(
        self, message="Choose a file",
        defaultDir=self.currentDirectory,
        defaultFile="*.xls",
        wildcard=wildcard,
        style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR
    )
    if dlg.ShowModal() == wx.ID_OK:
        self.path = dlg.GetPath()
        self.pathBox.write(self.path)
    dlg.Destroy()

def onGo(self, event):
    path=self.pathBox.GetValue()
def openExcel(self): 
    rbook=open_workbook(self.path)

所以基本上,有两个按钮。一个标有“选择输入文件”,一个标有“开始!”。它们的功能由上述方法定义。

我希望这个路径变量在另一个文件中可用,它将获取值(文件路径)并将其提供给打开 excel 文件的函数。

我在执行此操作时遇到问题...

这是我在另一个文件中的代码的开头:

app = wx.App()
windowClass(None, title="AskNorbert")
sheet = rbook.sheet_by_index(0)
numrows = (sheet.nrows)
numcols = (sheet.ncols)
leadslist = [[sheet.cell_value(i, j) for j in range(numcols)] for i in  range(numrows)]
wbook = copy(rbook)
w_sheet = wbook.get_sheet(0)
....
app.Mainloop()

【问题讨论】:

    标签: python oop wxpython


    【解决方案1】:

    假设你想在另一个函数中重用self.path,对吧?

    首先需要把这个函数放在“WindowClass”下面,然后用self.path作为输入打开excel:

    ...
    def openExcel(self):
        your_open_excel_function(self.path)
    ...    
    

    其次,为了确保 self.path 在 dlg.Destroy() 时不会消失,您可以对其进行深度复制:

    import copy.deepcopy
    
    ...
    if dlg.ShowModal() == wx.ID_OK:
            self.path = copy.deepcopy(dlg.GetPath())
            self.pathBox.write(self.path)
        dlg.Destroy()
    ...
    

    这应该对你有用。

    更新:

    首先,让rbook成为WindowClass的一个属性:

    def openExcel(self): 
        self.rbook=open_workbook(self.path)
    

    使用该实例的 rbook 属性。像这样:

    ...
    app = wx.App()
    my_class = windowClass(None, title="AskNorbert")
    my_class.openExcel()
    sheet = my_class.rbook.sheet_by_index(0)
    numrows = (sheet.nrows)
    ...
    

    【讨论】:

    • 好主意,但我仍然遇到问题。我收到错误“rbook”未定义...请参阅我最近的编辑
    • @ohbrobig 我认为你需要给变量 rbook 一个文件对象,然后使用它。否则,rbook 将不会被定义。
    • 对不起。我忘了说我添加了一些东西。立即查看原始帖子(我的错)。
    • fyi,open_workbook 是我已经导入的 xlrd 模块中定义的方法。
    • @ohbrobig 我的错。我忘了告诉你先让 rbook 成为一个属性。检查我的更新。
    猜你喜欢
    • 2021-01-21
    • 2017-06-27
    • 2015-05-22
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多