从另一个模块调用Tkinter类

时间:2016-04-18 18:29:44

标签: python tkinter

我有一个主文件,其中我已经定义了一个应用程序的所有GUI,另一个模块我有m)方法将数据导入到应用程序。

导入数据时有时存在重复记录,因此我想让用户通过调用存储在主模块中的Tkinter类来决定保留哪个记录(第一个或最后一个)。

Main_App.py

class DialogDupli(tkSimpleDialog.Dialog):#dialog duplicated records

    def __init__(self, parent):


        Toplevel.__init__(self, parent)
        self.transient(parent)
        title="Delete duplicated records"
        if title:
            self.title(title)
        self.parent = parent

        self.result = None
        body = Frame(self)
        self.initial_focus = self.body(body)
        body.pack(padx=5, pady=5)
        self.buttonbox()
        self.grab_set()
        if not self.initial_focus:
            self.initial_focus = self
        self.protocol("WM_DELETE_WINDOW", self.cancel)
        self.geometry("+%d+%d" % (parent.winfo_rootx()+50,
                                  parent.winfo_rooty()+50))
        self.initial_focus.focus_set()
        self.wait_window(self)

    def body(self, master):
        pdb.set_trace()
        self.selection = StringVar()

        self.radio=Radiobutton(master, text='Keep First record', variable=self.selection, value='First',state='active').grid(row=0,column=0,sticky=W)
        self.radio=Radiobutton(master, text='Keep Last record', variable=self.selection, value='Last',state='active').grid(row=1,column=0,sticky=W)


    def apply(self):
        cri = self.selection.get()
        self.result = cri
root = Tk()
root.mainloop()

import.py

from Main_App import DialogDupli

...#bla bla bla then方法导入数据

#Once我的数据框已创建我检查时间戳中是否有重复的记录

    dupli=df.reset_index().duplicated(subset=df.index.names)
    if dupli.any():#there are duplicates
        tkMessageBox.showwarning("Duplicated records","There are duplicated records in the Time Stamp")
        dialog=DialogDupli(root)#here call to the GUI in Main_App.py

现在问题是如何从导入模块调用参数root,因为它无法识别。

name 'root' is not defined

我在这里检查过类似的问题另一个网站,但我还不清楚。

1 个答案:

答案 0 :(得分:3)

您必须更改root的导入或定义,因为root参数是在类外部定义的。

您应该将其粘贴到Main_app.py

root = tk.Tk() 
app = DialogDupli(parent=root)
app.mainloop()

这里有例子: https://github.com/piotrowy/steganography_chat/blob/master/client/client.py https://github.com/piotrowy/steganography_chat/blob/master/client/view.py