2017-11-04 7 views
-1
from Tkinter import * 
import time 
import webbrowser 
import random 
import Tkinter  
"""Sets the time from the buttons into a list""" 
def selectedHour(): 
    x = hour.get() 
    if not wake_time: 
     wake_time.append(x) 
    else: 
     wake_time[0] = x 
    print wake_time 
    count += 1 

def selectedMinute(): 
    x = minute.get() 
    if len(wake_time) == 1: 
     wake_time.append(x) 
    else: 
     wake_time[1] = x 
    print wake_time 
    count += 1 

def selectedPeriod(): 
    x = period.get() 
    if len(wake_time) == 2: 
     wake_time.append(x) 
    else: 
     wake_time[2] = x 
    print wake_time 
    count += 1 

wake_time = [] 

"""Creates Buttons""" 
hour = IntVar() 
minute = IntVar() 
period = StringVar() 
hour.set(None) 
minute.set(None) 
period.set(None) 

count = 1 

if count == 1: 
    radio12 = Radiobutton(app, text = 12, value = 12, variable = hour, command = selectedHour).pack() 
elif count == 2: 
    radio2 = Radiobutton(app, text = 0, value = 0, variable = minute, command = selectedMinute).pack() 
else: 
    radio3 = Radiobutton(app, text = 'am', value = 'am', variable = period, command = selectedPeriod).pack() 

app.mainloop() 

어떤 수가 동일한 지에 따라 다른 시간에 내 버튼을 표시하는 방법은 무엇입니까? 내가 원하는 것은 버튼의 첫 번째 집합이 클릭되면 다른 일련의 단추를 보여주고 그 다음 번 클릭하면 세 번째 집합이 팝업 될 때입니다.Tkinter를 사용하여 파이썬에서 서로 다른 시간대에 다른 라디오 버튼 그룹을 어떻게 표시합니까?

+0

파이썬에는 라디오 버튼이 없습니다. 어떤 종류의 도서관을 이용하고 있습니까? 그렇다면 어느 것입니까? –

+0

Tkinter에는 라디오 버튼이 있습니다 [link] (http://effbot.org/tkinterbook/radiobutton.htm) – Gumboy

+0

예 죄송합니다. Tkinter를 사용하고 있습니다. –

답변

0
#!/usr/bin/python 
import Tkinter 
from Tkinter import * 
"""Sets the time from the buttons into a list""" 
def selectedHour(count): 
    x = hour.get() 
    if not wake_time: 
     wake_time.append(x) 
    else: 
     wake_time[0] = x 
    print wake_time 
    count += 1 
    frame2.tkraise() # brings frame to front 

def selectedMinute(count): 
    x = minute.get() 
    if len(wake_time) == 1: 
     wake_time.append(x) 
    else: 
     wake_time[1] = x 
    print wake_time 
    count += 1 
    frame3.tkraise() # brings frame to front 

def selectedPeriod(count): 
    x = period.get() 
    if len(wake_time) == 2: 
     wake_time.append(x) 
    else: 
     wake_time[2] = x 
    print wake_time 
    count += 1 
    frame4.tkraise() # brings frame to front 

wake_time = [] 


"""Creates Buttons""" 
app = Tk() 

hour = IntVar() 
minute = IntVar() 
period = StringVar() 
hour.set(None) 
minute.set(None) 
period.set(None) 
frame1 = Frame(app) 
frame2 = Frame(app) 
frame3 = Frame(app) 
frame4 = Frame(app) 
for frame in (frame1, frame2, frame3, frame4): 
    frame.grid(row=0,column=0, sticky='news') #set frame layout 

count = 1 


# initial value 


HOUR = [1,2,3,4,5,6,7,8,9,10,11,12] 
MINUTE = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59] 
PERIOD = ['AM','PM'] 

group1 = LabelFrame(frame1, text="Hour", padx=5, pady=5) #Hour Label 
group1.pack(padx=10, pady=10) 

HRoption = OptionMenu(group1, hour, *HOUR, command = lambda x:selectedHour(count)) #dropdown menu for hours 
HRoption.pack() 

group2 = LabelFrame(frame2, text="Minute", padx=5, pady=5) #label for minutes 
group2.pack(padx=10, pady=10) 

MINOption = OptionMenu(group2, minute, *MINUTE, command = lambda x:selectedMinute(count)) #dropdown menu for minutes 
MINOption.pack() 

group3 = LabelFrame(frame3, text="Period", padx=5, pady=5) 
group3.pack(padx=10, pady=10) #label for period 

MINOption = OptionMenu(group3, period, *PERIOD, command = lambda x:selectedPeriod(count)) #dropdown menu for period 
MINOption.pack() 
frame1.tkraise() #start the first frame 
app.mainloop() 
+0

죄송합니다. 왜 selectedHour() 메서드에 "count"변수가 필요한지 설명해 주시겠습니까? 죄송합니다. 저는이 일에 아주 익숙합니다. 내가 그랬던 것처럼 왜 작동하지 않았을까? count = + 1 어떤 카운트가 있는지에 따라 어떤 버튼이 보이는지 바꾼다 –

+0

당신은 count = 1로 카운트를 사용하면서 selectedHour() 함수를 가지고있다. – Gumboy

+0

당신은 count가 1 씩 증가하지만 count의 매개 변수가 전달되지 않은 채로 selectedHour() 함수를 가지고 있습니다. 파이썬은 한 줄씩 실행되기 때문에 이전에 가지고 있던 if 서술문은 한 번만 실행됩니다. 되돌릴 수는 없습니다. 함수가 도움이되는 곳입니다. 그래서 한 번 이상 뭔가를한다면 반복하지 않아도됩니다. . 'while (count> = 1)'while 루프를 사용하여 그 안에 if 문을 넣을 수도 있지만 while 루프가 실행을 멈추게하려면 중지 조건이 필요합니다. – Gumboy