2017-12-11 2 views
2

제목이 혼란 스럽지만 좀 더 나은 방법으로 내 문제를 표현하는 방법을 모르겠다. 파이썬도 처음이다.레이블을 파이썬의 새 레이블로 바꾸기

좋아, 여기 내 문제가있다 : 당신이 버튼을 클릭하고 그 번호를 표시 할 때 임의의 숫자를 생성하는 프로그램이 있는데, 당신이 그것을 클릭 할 때마다 이전의 것 아래에 새로운 권리가 표시되므로 번호 대신 단지 이전 아래에 나타나는의 변경, 여기 내 코드입니다 :

(스크린 샷 : 3.0 https://gyazo.com/2bc9ae7bbe32c2422c94891ca30b8512 파이썬)

from tkinter import * 
import random 

screen = Tk() 

def generate(): 
     random_number = random.randint(1, 1000) 
     result = Label(screen, text="Number: " + str(random_number)) 
     result.pack(side=TOP) 

text = Label(screen, text="Click to generate a random number:") 
text.pack(side=TOP) 

button = Button(screen, text="GENERATE!", command=generate, fg="yellow",     
bg="purple") 
button.pack(side=TOP) 

screen.mainloop() 

답변

3

변경 :

def generate(): 
     random_number = random.randint(1, 1000) 
     result = Label(screen, text="Number: " + str(random_number)) 
     result.pack(side=TOP) 

:

result = Label(screen) 
result.pack(side=TOP) 
def generate(): 
     random_number = random.randint(1, 1000) 
     result['text'] = "Number: " + str(random_number) 

전 코드를 생성하는 새로운 메모리를 점유 할 때마다 generate가 호출 Label 객체; 후자는 Label 개체를 한 번만 만들고 generate이 호출 될 때마다 text 옵션을 수정합니다.

편집 :Farhan K. 님의 댓글과 병행하여 더 많은 설명이 추가되었습니다.

+0

고맙습니다. :) – Naji

+1

@Myko FYI, 당신은 원래'generate'가 호출 될 때마다'result'라는 새로운 레이블을 작성했습니다. –

0

place 대신 pack을 사용하십시오. 이전에 레이블 위젯에 결과를 표시하라는 팩을 사용하지만 place은 이전 위치를 겹쳐 정확한 지점에 표시합니다.

from tkinter import * 
import random 

screen = Tk() 

def generate(): 
     random_number = random.randint(1, 1000) 
     result = Label(screen, text="Number: " + str(random_number)) 

     result.place(x=650, y=100) 

text = Label(screen, text="Click to generate a random number:") 
text.pack(side=TOP) 

button = Button(screen, text="GENERATE!", command=generate, fg="yellow", 
bg="purple") 
button.pack(side=TOP) 

screen.mainloop() 
+2

다른 것이 너무 겹치지 않을까요? – Nae

+0

문법을 용서합니다. –

+0

지우지 않으면 메모리 누수가 발생할 수 있습니다. – Nae

관련 문제