2013-08-11 5 views
0

Это мой код:2-я страница не отображается?

import sys 
from tkinter import * 


#first new screen 
def next_screen(names): 
    for widget in names: 
     widget.place_forget() 
     buttonhyp = Button (text = "button1",fg = "blue",command = hypoténusegetdef()) 
     buttonhyp.grid (row = 1,column = 2) 

def forget_page1(): 
    widgets = [mLabel1, button] 
    next_screen(widgets) 

################################################################################ 

def hypténusegetdef(): 
    widgets1 = [buttonhyp] 
    nextscreen1(widgets1) 

def next_screen(names): 
    for widget in names: 
     widget.place_forget() 
     hyplabel1 = Label (text = "This is my text") 








#first page things 
mGui = Tk() 

mGui.geometry("600x600+545+170") 
mGui.title("MyMathDictionary") 
mLabel1 = Label (text = "Welcome to MyMathDictionary. Press Next to continue.", 
       fg = "blue",bg = "white") 
mLabel1.place (x= 150,y = 200) 

button = Button (text = "Next", command = forget_page1) 
button.place(x = 275,y = 230) 




mGui.mainloop() 

Что я пытаюсь сделать, это открыть программу и заставить пользователя нажать на кнопку «Далее», а затем, чтобы показать еще одну кнопку, которая называется «Button1», и когда пользователь нажимает кнопку «button1», на экране появляется текст, который говорит «Это мой текст» в моем коде. Но когда я его запускаю, я нажимаю «Далее», и ничего не отображается, я проверял и повторно проверял, но ничего не кажется работа. Любая помощь будет оценена по достоинству.

+0

И в функции next_screen я удалил() из hypotenusegetdef:) .... –

+0

какой? у вас есть два !!! Программа учитывает только вторую. пожалуйста, исправьте код и покажите, какой результат вы получите. Поскольку этот код не может работать. – joaquin

ответ

1

Я не эксперт, но я попробую.

Во-первых, import sys не требуется. И импортировать все объекты из модуля tkinter с помощью from tkinter import* не рекомендуется. Вы должны использовать import tkinter или import tkinter as tk, чтобы избежать непредвиденных последствий.

У вас есть 2 функции с тем же именем. next_screen(names), которого не должно быть.

Вместо того чтобы использовать widgets = [mLabel1, button], чтобы скрыть виджеты, вы должны поместить их в рамку, чтобы вы могли использовать winfo_children(), чтобы найти все дочерние элементы.

При создании кнопок и меток вы должны поместить parent widget name. например,

import tkinter as tk 
root = tk.Tk() 
mylabel = tk.Label(root,text='this is a label') 
mylabel.pack() 
root.mainloop() 

В вашей первой next_screen(names) функции, вы использовали grid method для отображения кнопки. Не следует смешивать grid method и place method.

Это то, что я придумал

import tkinter as tk 

def Screen_1(): 
    Clear(myframe) 
    mybutton2= tk.Button(myframe,text = "Button1", command = Screen_2) 
    mybutton2.pack() 

def Screen_2(): 
    Clear(myframe) 
    mylabel2= tk.Label(myframe,text = "This is my text",fg = "blue",bg = "white") 
    mylabel2.pack(side='top') 

def Clear(parent): 
    for widget in parent.winfo_children(): 
     widget.pack_forget() 

root =tk.Tk() 

myframe=tk.Frame(root) 
myframe.pack() 

mylabel1= tk.Label(myframe,text = "Welcome to MyMathDictionary. Press Next to continue.",fg = "blue",bg = "white") 
mylabel1.pack(side='top') 

mybutton1= tk.Button(myframe,text = "Next", command = Screen_1) 
mybutton1.pack(side='bottom') 

root.mainloop() 

надеюсь, что это помогает!

+0

re "Вы не должны использовать метод сетки для отображения всего 1 элемента.": Почему вы так говорите? Нет ничего плохого в использовании сетки для одного элемента, хотя 'pack' обычно более удобен в этой ситуации. В противном случае, хорошая работа, указывающая на все недостатки. –

+0

@BryanOakley Я удалил указанную вами линию. Я всегда думал, что диспетчер сетки для табличных структур. Мне кажется логичным (по крайней мере, мне) использовать «строки и столбцы», когда у вас есть только один элемент. Но я начал изучать Tkinter, как и несколько месяцев назад, поэтому я могу ошибаться. –

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