2016-01-22 79 views
2

我正在使用Python创建GUI。它正常工作,直到我在__init__中包含了一个循环按钮。我在命令提示符编译时没有收到任何错误。 GUI不打开。什么导致这个错误?使用Tkinter动态创建按钮

New.py:

class myapp: 

def callfunc(title = "", author = "", body = ""): 
    L1 = Label(top, text="Title") 
    L1.pack(side = TOP) 
    E1 = Entry(top, bd =5) 
    E1.pack(side = TOP) 
    E1.insert(0,title) 

    L2 = Label(top, text="Author") 
    L2.pack(side = TOP) 
    E2 = Entry(top, bd =5) 
    E2.pack(side = TOP) 
    E2.insert(0,author) 

    L3 = Label(top, text="Body") 
    L3.pack(side = TOP) 
    E3 = Entry(top, bd =5) 
    E3.pack(side = TOP) 
    E3.insert(0,body) 

    data = {"author": E2.get(), 
    "body" : E3.get(), 
    "title" : E1.get()} 
    data_json = json.dumps(data) 
    headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} 
    url = 'http://localhost/spritle/api.php?action=insert_list&data_json=' 
    check = connected_to_internet(url) 
    if(check): 
     r = requests.post(url+data_json ,headers=headers) 
     if (r.status_code == 200): 
      tkMessageBox.showinfo("Result","success") 
     else: 
      if(os.path.isfile("offline_post.json")): 
       with open('offline_post.json','a') as f: 
        f.write(data_json+"\n") 
      else: 
       open('offline_post.json', 'a') 
       with open('offline_post.json','a') as f: 
        f.write(data_json+"\n") 
    SubmitButton = Button(top,text="Submit", fg="White", bg="#0094FF", 
           font=("Grobold", 10), command = callfunc) 
    SubmitButton.pack() 

# homeButton = Button(text="Home", fg="White", bg="#0094FF", 
#        font=("Grobold", 10), command = view) 
# homeButton.pack() 

def connected_to_internet(url, timeout=5): 
    try: 
     _ = requests.get(url, timeout=timeout) 
     threading.Timer(10, connected_to_internet(url)).start() 
     print "asd" 
     return True 
    except requests.ConnectionError: 
     print("No internet connection available.") 
     return False 

def __init__(self, parent): 
    self.row=0 
    url = "http://localhost/spritle/api.php?action=get_users"; 
    r = requests.get(url) 
    j = r.json() 
    E1 = Label(top, text="Title") 
    E1.grid(row=self.row, column=0) 
    E1 = Label(top, text="Author") 
    E1.grid(row=self.row, column=1) 
    E1 = Label(top, text="Body") 
    E1.grid(row=self.row, column=2) 
    for val in j: 
     self.row += 1 
     T1 = Label(top, text=val['title']) 
     T1.grid(row=self.row, column=0) 
     A1 = Label(top, text=val['author']) 
     A1.grid(row=self.row, column=1) 
     B1 = Label(top, text=val['body']) 
     B1.grid(row=self.row, column=2) 
     editButton = Button(top, text="Edit", fg="White", bg="#0094FF", 
           font=("Grobold", 5), command = lambda: callfunc(val['title'],val['author'],val['body'])) 
     editButton.pack() 
    newButton = Button(top, text="New Post", fg="White", bg="#0094FF", 
           font=("Grobold", 5), command = lambda: callfunc) 
    newButton.pack() 

top = Tk() 
top.title("App") 
app = myapp(top) 
top.mainloop() 

`

+0

当您移除此按钮时会发生什么?它再次工作吗? – furas

+0

是的,它工作...如果我删除newbutton和editbutton – user3041822

+0

它是否工作,当你只删除newbutton或只editbutton? – furas

回答

0

您同时使用packgrid与共享一个共同的父(top)部件。您必须只使用一个或另一个。当你同时使用时,你会得到你描述的行为。