2017-03-03 3 views
0

나는 파이썬으로 tkinter gui를 만들고 있지만 적절하지 않다. 활성화를 클릭하면 사용자에게 패스워드를 묻는 새 상자를 열어야하지만 약간의 오류가있다.
여기 아래의 문제를 정의 내가 사용하고 코드입니다 :대화 상자 파이썬과의 Tkinter에서의 배치

import Tkinter 
import tkMessageBox 
from ttk import * 
from Tkinter import * 

root = Tk() 
top = Tk() 

def helloCallBack(): 

top.title("Activation") 

Label(top, text="Username").grid(row=0, sticky=W, padx=4) 
Entry(top).grid(row=0, column=1, sticky=E, pady=4) 

Label(top, text="Pass").grid(row=1, sticky=W, padx=4) 
Entry(top).grid(row=1, column=1, sticky=E, pady=4) 

Button(top, text="Submit").grid(row=2, column=1) 

B = Tkinter.Button(text ="Activate", command = helloCallBack) 

B.pack() 
root.mainloop() 
top.mainloop() 

그래서 내가 갖는 출력이됩니다;

그리고 난 활성화를 클릭하면 : 여기
1. 기기 pic2

두 문제는 내가 프로그램을 실행 루트 상자 뒤에 빈 상자, 어떻게 내가 그 제거합니까입니까?
2. 활성화를 클릭하면 첫 번째 메시지 상자 (루트)가 삭제되지 않습니다.

답변

2

실수로 두 개의 메인 루프가 두 개의 별도 프로그램을 실행하려고합니다. 새 사용자 이름/패스 쌍이 있고 destroy 방법을 사용하는 새 상자에는 Tk()이라는 새 인스턴스 대신 Toplevel() 위젯을 사용하십시오. 또한

from Tkinter import * 


def show_form(): 
    root = Tk() 
    b = Button(text="Activate", command=lambda: show_call_back(root)) 
    b.pack() 
    root.mainloop() 


def show_call_back(parent): 
    top = Toplevel(parent) 

    top.title("Activation") 
    Label(top, text="Username").grid(row=0, sticky=W, padx=4) 
    Entry(top).grid(row=0, column=1, sticky=E, pady=4) 
    Label(top, text="Pass").grid(row=1, sticky=W, padx=4) 
    Entry(top).grid(row=1, column=1, sticky=E, pady=4) 
    Button(top, text="Submit", command=top.destroy).grid(row=2, column=1) 

show_form() 

this 사이트가 매우 당신을 위해합니다 recommened :

그래서 여기 예입니다!

그리고 몇 가지 링크 :

Toplevel widget

Entry widget (그리고 그것에서 문자열을 잡고 나는이 당신의 다음 단계라고 생각하는 방법)

+1

@Lafexlos, 내가 당신과 동의 해요, 감사합니다 추가! 이것은 사실이며,이 변수를 저장하는 메소드와 속성을 가진 * 클래스와 비슷한 * 구조 (자신의 '클래스 App (tk.Tk)'를 빌드하는 것과 같은 smth)와 같은 OP에 대한 더 많은 권장 사항이 있습니다. 그러나 나는 OP가 python/tkinter에 새로운 것으로 생각하고이 정보는 그를 위해 복잡 할 것이라고 생각합니다. (또는 너무 직선이므로 여기에 연구를 할 여지가 없습니다. 단지 복사/과거입니다.) 방금 OP의 코드를 잡고 원하는대로 만들었습니다. – CommonSense

+0

고맙습니다;) 그렇습니다. 저는 Tkinter로 Python을 처음 사용했기 때문에 학습 과정에서 그렇습니다. –