私は開始ページと、その開始ページから呼び出される2つのプログラムでプログラムを作成していました。どちらのサブプログラムも単独で動作します。しかし、スタートページに入れると、ストップウオッチのタイミングラベルは表示されません。あなたが思っている場合は、私が行って、私のプログラムにそれらを置く:他のTkinterプログラムから呼び出されたときにラベルが表示されない
import program
program.function()
をここに私のスタートページプログラムは次のとおりです。
from Tkinter import *
class start_page:
def __init__(self,master):
self.master = master
self.frame = Frame(self.master)
self.countdown = Button(master, text = "Timer", command = self.c).pack()
self.stopwatch_butt = Button(master,text="Stopwatch",command=self.g).pack()
def g(self):
import stopwatch
stopwatch.f()
def c(self):
import timer_prog
timer_prog.timer()
self.master.after_cancel(timer_prog)
def main():
root = Tk()
s = start_page(root)
root.title("Timer Suite: Brian Ton")
root.mainloop()
main()
私はこのプログラムを実行すると、タイマープログラムが正常に動作しますが、ストップウォッチそのラベルは表示されず、ボタンのみが表示されます。私は関数の後にすべてのTkをクリアしようとしましたが、それはうまくいきませんでした。また、ストップウォッチプログラムを最初に実行しようとしましたが、役に立たなかった。ここで
は私のストップウォッチプログラムです:
from Tkinter import *
import datetime
def s():
start.config(state='disabled')
stop.config(state="normal")
reset.config(state='disabled')
Start()
def Start():
if reset['state'] == 'disabled' and stop['state'] == 'normal':
hidden.set(str(int(hidden.get())+1))
root.update()
root.after(1000,Start)
curr = hidden.get()
g.set(str(datetime.timedelta(seconds=int(curr))))
print g.get()
else:
return None
def Stop():
start.config(state='disabled')
stop.config(state='disabled')
reset.config(state="normal")
def Reset():
start.config(state="normal")
stop.config(state="disabled")
reset.config(state='disabled')
hidden.set('0')
g.set(str(datetime.timedelta(seconds=0)))
def f():
global root,frame,master,hidden,g,timelabel,start,stop,reset
root = Tk()
frame = Frame(root)
master = root
hidden = StringVar()
g = StringVar()
hidden.set('0')
timelabel = Label(master,textvariable=g)
g.set(str(datetime.timedelta(seconds=int(0))))
timelabel.grid(row=1,column=2)
start = Button(master,text="Start",command = s,state="normal")
stop = Button(master,text="Stop",command = Stop,state = "disabled")
reset = Button(master,text="Reset",command = Reset,state = "disabled")
start.grid(row=2,column=1)
stop.grid(row=2,column=2)
reset.grid(row=2,column=3)
root.update()
root.mainloop()
そして、ここに私のタイマープログラムです:また
from Tkinter import *
import datetime
def get_seconds(h,m,s):
hr_sec = h * 3600
m_sec = m * 60
return hr_sec+m_sec+s
def timerstartstop():
hours = hour_entry.get()
minutes = minute_entry.get()
sec = second_entry.get()
if hours == "":
hours = 0
hour_entry.insert(0,"0")
if minutes == "":
minutes = 0
minute_entry.insert(0,"0")
if sec == "":
sec = 0
second_entry.insert(0,"0")
c = get_seconds(int(hours), int(minutes), int(sec))
global s
s = StringVar(master)
s.set(c)
if startstop['text'] == 'Stop':
global curr
curr = shown
s.set(-1)
if startstop['text'] == 'Reset':
startstop.config(text="Start")
s.set(c)
root.update()
shown.set(str(datetime.timedelta(seconds=int(s.get()))))
return None
countdown()
import winsound
def countdown():
startstop.config(text="Stop")
global shown
good = True
shown = StringVar(master)
shown.set(str(datetime.timedelta(seconds=int(s.get()))))
L = Label(master,textvariable=shown).grid(row=1,column=2)
if int(s.get()) == 0:
startstop.config(text="Reset")
while startstop['text'] != "Start":
root.update()
winsound.Beep(500,500)
elif int(s.get()) < 0:
good = False
shown.set(curr.get())
startstop.config(text="Reset")
else:
if good:
s.set(str(int(s.get())-1))
root.after(1000,countdown)
def ex():
root.after_cancel(countdown)
root.destroy()
def timer():
global root
global master
global frame
root = Tk()
master = root
frame = Frame(master)
global hour_entry
hour_entry = Entry(master,width=3)
hour_entry.grid(row=0,column=0)
colon_l = Label(master,text=':').grid(row=0,column=1)
global minute_entry
minute_entry = Entry(master,width=2)
minute_entry.grid(row=0,column=2)
colon_l2 = Label(master,text=':').grid(row=0,column=3)
global second_entry
second_entry = Entry(master,width=2)
second_entry.grid(row=0,column=4)
global startstop
startstop = Button(master,text="Start",command=timerstartstop)
e = Button(master,text="Exit",command=ex).grid(row=1,column=3)
startstop.grid(row=0,column=5)
root.mainloop()
、私が使用し、異なる出発メニューからこれら二つのプログラムを実行しようとしましたコンソール、それは働いた。
コンソールプログラムは次のとおりです。添付
import timer_prog
timer_prog.timer()
raw_input('next')
import stopwatch
stopwatch.f()
はストップウォッチプログラムが起動プログラムから呼び出されたときのように見えるんどのような対どのように見えるかのいくつかのスクリーンショットです。
注:現在の時刻が毎秒印刷されるため、プログラムは開始ページから実行されていることがわかります。また、私はいくつかのスクリーンショットを添付
Stopwatch Program Run Directly
Stopwatch Program Run From The Start Page
'tkinter'プログラムは一つだけ' Tkの() '(メインウィンドウ)と1つの'メインループを使用する必要があり() '。あなたは多くの 'Tk()'と 'mainloop()'を実行して問題を起こすことができます。メインプログラムは 'Tk()'と 'mainloop()'を使うべきです、他のプログラムは 'mainloop()'なしで 'Toplevel()'を使ってメインプログラムの一部として走らせるべきです。スタンドアロンプログラムとして実行する場合にのみ 'Tk()'と 'mainloop()'を使うべきです。 – furas
ところで: '__name__ ==" __main __ "'は、スタンドアロンプログラムとして実行するとtrueになり、読み込み時にはfalseになるため、 '__name__ ==" __main __ "'を使用してプログラムをスタンドアロンとして実行できます。 – furas