2016-01-22 2 views
2

Я создаю графический интерфейс с использованием Python. Он работал правильно, пока я не включил кнопку для цикла в __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

Вы используете как pack и grid с виджетами, которые имеют общий родительский (top). Вы должны использовать только тот или иной. Когда вы используете оба варианта, вы получите описание, которое вы описываете.

Смежные вопросы