我有一个主文件,其中我已经定义了一个应用程序的所有GUI,另一个模块我有m)方法将数据导入到应用程序。
导入数据时有时存在重复记录,因此我想让用户通过调用存储在主模块中的Tkinter类来决定保留哪个记录(第一个或最后一个)。
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()
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
我在这里检查过类似的问题另一个网站,但我还不清楚。
答案 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