繁体   English   中英

我如何将此代码用作 python 中的 class

[英]how can i use this code as a class in python

I want to make a python class with this code that will create a window and multiple timers in it but I don't know how to do it I tried many solutions but I am pretty bad at class plz help

import time
from Tkinter import *

root = Tk()

def start():
    global is_reset
    selected_time = int(spin.get())
    is_reset = False
    if selected_time > 0:
        spin["state"] = "disable"
        while is_reset == False and selected_time != -1:
            lbl["text"] = selected_time
            selected_time -= 1
            root.update()
            time.sleep(0.1)
        spin["state"] = "normal"
    else:
        None
def reset_():
    global is_reset
    is_reset = True
    n.set(0)
    lbl["text"] = 0 
lbl_frame = Frame(root , width = 100 , height=100 ,bg="blue")
lbl_frame.grid(row=1)
lbl = Label(lbl_frame ,text="0")
lbl.place(x=15 , y=10)
n = IntVar()
spin = Spinbox(lbl_frame , from_=0, to=59,width=3,textvariable=n)
spin.place(x=60,y=10)
btn_start = Button(lbl_frame, text="start",width=3, command=start).place(x=5,y=60)
btn_reset = Button(lbl_frame, text="reset",width=3,command=reset_).place(x=60,y=60)


mainloop()

您可以使用任何名称制作 class,例如:

class program:
root = Tk()
def __init__(self):
//in this init function you specify the common variables that will be input in the class like this:
    self.variable = variable

def start():
    global is_reset
    selected_time = int(spin.get())
    is_reset = False
    if selected_time > 0:
        spin["state"] = "disable"
        while is_reset == False and selected_time != -1:
            lbl["text"] = selected_time
            selected_time -= 1
            root.update()
            time.sleep(0.1)
        spin["state"] = "normal"
    else:
        None
def reset_():
    global is_reset
    is_reset = True
    n.set(0)
    lbl["text"] = 0 

注意缩进

还有您可以使用的其他代码

if __name__=="__main__":
lbl_frame = Frame(root , width = 100 , height=100 ,bg="blue")
lbl_frame.grid(row=1)
lbl = Label(lbl_frame ,text="0")
lbl.place(x=15 , y=10)
n = IntVar()
spin = Spinbox(lbl_frame , from_=0, to=59,width=3,textvariable=n)
spin.place(x=60,y=10)
btn_start = Button(lbl_frame, text="start",width=3, command=start).place(x=5,y=60)
btn_reset = Button(lbl_frame, text="reset",width=3,command=reset_).place(x=60,y=60)

您可以使用 class 功能,例如:

program(input***).start()
import time
from Tkinter import *

class Timers:
    def __init__(self):
        self.root = Tk()
        self.is_reset = False
        self.lbl_frame = Frame(self.root , width = 100 , height=100 ,bg="blue")
        self.lbl_frame.grid(row=1)
        self.lbl = Label(self.lbl_frame ,text="0")
        self.lbl.place(x=15 , y=10)
        self.n = IntVar()
        self.spin = Spinbox(self.lbl_frame , from_=0, to=59,width=3,textvariable=n)
        self.spin.place(x=60,y=10)
        self.btn_start = Button(self.lbl_frame, text="start",width=3, command=self.start).place(x=5,y=60)
        self.btn_reset = Button(self.lbl_frame, text="reset",width=3,command=self.reset_).place(x=60,y=60)
        mainloop()

    def start(self):
        selected_time = int(self.spin.get())
        self.is_reset = False
        if selected_time > 0:
            self.spin["state"] = "disable"
            while self.is_reset == False and selected_time != -1:
                self.lbl["text"] = selected_time
                selected_time -= 1
                self.root.update()
                time.sleep(0.1)
            self.spin["state"] = "normal"
        else:
            None

    def reset_(self):
        self.is_reset = True
        self.n.set(0)
        self.lbl["text"] = 0 ```

感谢@Super sub,我得到了答案,,,,,,,

class 定时器:全局根 root = Tk() root.geometry("300x300") def init (self, X,Y): global root def display_s(): self.lbl["text"] = self.spin.get( ) self.is_reset = False self.th = threading.Thread(target=start) self.lbl_frame = Frame(root, width = 100, height=100,bg="blue") self.lbl_frame.place(x=X, y=Y) self.lbl = 标签(self.lbl_frame,text="0") self.lbl.place(x=15, y=10) self.Numinspin = IntVar() self.spin = Spinbox(self.lbl_frame , from_=0, to=59,width=3, textvariable= self.Numinspin, command=display_s) self.spin.place(x=60,y=10) self.btn_start = Button(self.lbl_frame, text="开始”,宽度=3,命令=self.start).place(x=5,y=60) self.btn_reset = Button(self.lbl_frame, text="reset",width=3,command=self.reset_) .place(x=60,y=60) mainloop() def start(self): selected_time = int(self.spin.get()) self.is_reset = False if selected_time > 0: self.spin["state"] =“禁用”,而 self.is_reset == False 和 selected_time:= -1。 self.lbl["text"] = selected_time selected_time -= 1 root.update() time.sleep(0.1) self:spin["state"] = "normal" else: None def reset_(self). self.is_reset = True self.Numinspin.set(0) self,lbl["text"] = 0,,,,,,,,

多定时器、多接口、多计数器。

from tkinter import *


class Timers(Frame):
    for_counting = []

    def __init__(self, master, default=0):
        super().__init__(master, width=100, height=100, bg="blue")
        self.count = IntVar(value=default)
        self.counter = IntVar(value=0)
        self.is_reset = BooleanVar(value=False)

        # Here you can customize your own GUI 
        self.lbl = Label(self, textvariable=self.counter)
        self.lbl.place(x=15, y=10)
        self.spin = Spinbox(self, from_=0, to=59, width=3, textvariable=self.count)
        self.spin.place(x=60, y=10)
        self.btn_start = Button(self, text="start", width=3, command=self.start)
        self.btn_start.place(x=5, y=60)
        self.btn_reset = Button(self, text="reset", width=3, command=self.reset)
        self.btn_reset.place(x=60, y=60)

    def start(self):
        if self not in Timers.for_counting and self.count.get() > 0:
            Timers.for_counting.append(self)
            self.spin["state"] = "disable"
            self.is_reset.set(False)
            self.counter.set(self.count.get())
            while len(Timers.for_counting) != 0:
                for obj in Timers.for_counting:
                    if obj.is_reset.get() is False and obj.counter.get() > 0:
                        obj.counter.set(obj.counter.get() - 1)
                    elif obj.is_reset.get() is True or obj.counter.get() <= 0:
                        obj.spin["state"] = "normal"
                        Timers.for_counting.remove(obj)
                self.update()
                self.after(100)  # 1000 = 1 Second
        else:
            pass

    def reset(self):
        self.count.set(0)
        self.counter.set(0)
        self.is_reset.set(True)


root = Tk()

t1 = Timers(root)
t1.count.set(5)
t1.grid(row=0, column=0)

t2 = Timers(root)
t2.count.set(60)
t2.grid(row=0, column=1)

Timers(root, 40).grid(row=1, column=0)

Timers(root).grid(row=1, column=1)

root.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM