mckie
@mckie

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

別ファイルのGUIアプリをimportして実行するとラベルが表示されなくなる

解決したいこと

tkinterで作成しているmainプログラムのボタンを押すと、別ファイルのタイマープログラムを呼び出すプログラムを作っています。
mainプログラムからタイマーのプログラムを呼び出したいが、タイマーのラベルが表示されなくなります。
タイマーのラベルを表示できるようにしたいです。わかる方がいましたらご教授お願いします。

発生している問題・エラー

エラーメッセージは出ていません。

例)
↓カウントダウンタイマーを単体で動かしたとき(正常)
スクリーンショット 2023-02-27 131215.png

mainファイルからimportして実行したとき(異常)
スクリーンショット 2023-02-27 131355.png

該当するソースコード

python main.py
import tkinter as tk


class main:
    def __init__(self) -> None:
        win = tk.Tk()
        win.title("main")
        win.geometry('510x170')
        Button1= tk.Button(win, text="カウントダウンタイマー",bg="lightgreen",command= self.ctdown).grid()
        win.mainloop()
        self.ctdown()
        
            

    def ctdown(self):
        import countdown       

app = main()

python countdown.py
import tkinter as tk
from tkinter import font
from tkinter import messagebox


class App:
    def __init__(self, win):
        self.win = win
        self.win.title('Timer')
        self.win.geometry('510x170')
        self.count = None
        self.create_widgets()
        self.create_widgets = None

        
        
        


    def create_widgets(self):
        self.win.rowconfigure(0, weight=1)
        self.win.columnconfigure(0, weight=1)

        self.frame111 = tk.Frame(self.win, width=510,height=170)
        self.frame111.grid(row=0, column=0, sticky="nsew")
        tk.Label(self.frame111, text="カウントダウンタイマー",bg="lightgreen").pack(fill=tk.X)
        tk.Label(self.frame111,text="時間(秒)").pack()
        self.entry = tk.Entry(self.frame111)
        self.entry.insert(tk.END,"4")#標準時間
        self.entry.pack() 
        self.time = tk.StringVar()
        self.time_init()        
        self.label = tk.Label(self.frame111, textvariable=self.time, relief=tk.SUNKEN,
                              font=("",20),bg='white')
        self.label.pack(fill=tk.X,pady=10)
        self.bt000 = tk.Frame(self.frame111)
        self.bt000.pack()
        self.font1 = font.Font(family='Helvetica', size=15, weight='bold')

        self.b_start = tk.Button(self.bt000, text='Start', font=self.font1, command=self.start)
        self.b_stop = tk.Button(self.bt000, text='Stop', font=self.font1, command=self.stop, state=tk.DISABLED)
        self.b_reset = tk.Button(self.bt000, text='Reset', font=self.font1, command=self.reset, state=tk.DISABLED)

        self.b_start.pack(side=tk.LEFT,ipadx=30, padx=10)
        self.b_stop.pack(side=tk.LEFT,ipadx=30, padx=10)
        self.b_reset.pack(side=tk.LEFT,ipadx=30, padx=10)

    def time_init(self):
        self.time.set("セットする時間を秒単位で入力してください。")

    def time_err(self):
        self.time.set("不正な入力値です。")        

    def time_set(self):
        self.h = self.count // 3600
        self.m = (self.count % 3600) // 60
        self.s = (self.count % 3600) % 60        
        self.time.set("のこり %02d時間 %02d分 %02d秒" % (self.h,self.m,self.s))

    def start(self):
        try:
            if not self.count:
                self.count = int(self.entry.get())                                   
        except:
            self.time_err()
            return

        self.started = True
        self.time_set()
        if(0 < self.count <= 10):
            self.label.config(bg="red")
        self.win.after(1000, self.counting)
        self.entry.config(state=tk.DISABLED)
        self.b_start.config(state=tk.DISABLED)
        self.b_stop.config(state=tk.NORMAL)
        self.b_reset.config(state=tk.DISABLED) 

    def stop(self):
        self.started = False
        self.b_start.config(state=tk.NORMAL)
        self.b_stop.config(state=tk.DISABLED)
        self.b_reset.config(state=tk.NORMAL)

    def reset(self):
        self.count = None
        self.time_init()
        self.label.config(bg="white")
        self.b_reset.config(state=tk.DISABLED)
        self.entry.configure(state=tk.NORMAL)

    def counting(self):
        if self.started:
            self.count -=1
            self.time_set()

            if (0 < self.count <= 10):
                self.label.config(bg="red")

            if self.count <= 0:
                self.stop()
                self.reset()
                ret = messagebox.askokcancel("完了","タイムアップです" )
                if ret == True:
                    self.win.destroy()


            self.win.after(1000, self.counting)


def main():
    win = tk.Tk()
    App(win)
    win.mainloop()

app = main()

0

No Answers yet.

Your answer might help someone💌