我的TKinter计数器运行不正常



所以我的计数器有问题,首先每次点击按钮时它都应该向上计数。当计数器超过26时,它应该将其设置回零并影响其他计数器。问题是,当我通过单击"减少"然后单击"增加"将它们全部设置为26时,它的行为并不像应该的那样。我们将不胜感激,谢谢。

#imports everything from tkinter
import Tkinter as tk
from Tkinter import*
class Store1:
    def __init__(self):
        self.variable1 = tk.IntVar()
        self.variable2 = tk.IntVar()
        self.variable3 = tk.IntVar()
    def add1(self):
        counter1 = self.variable1
        counter2 = self.variable2
        counter3 = self.variable3
        counter1.set(counter1.get() + 1)
        if counter1.get() > 26:
            counter1.set(1)
            counter3.set(counter3.get() + 1)
        if counter2.get() > 26:
            counter2.set(1)
            counter3.set(counter3.get() + 1)
        if counter3.get() > 26:
            counter3.set(1)
        return counter1.get(), counter2.get(), counter3.get()
    def add2(self):
        counter1 = self.variable1
        counter2 = self.variable2
        counter3 = self.variable3
        counter2.set(counter2.get() + 1)
        if counter2.get() > 26:
            counter2.set(1)
            counter1.set(counter1.get() + 1)
        if counter3.get() > 26:
            counter3.set(1)
            counter2.set(counter2.get() + 1)
        if counter1.get() > 26:
            counter1.set(1)
            counter3.set(counter3.get() + 1)
        return counter1.get(), counter2.get(), counter3.get()
    def add3(self):
        counter1 = self.variable1
        counter2 = self.variable2
        counter3 = self.variable3
        counter3.set(counter3.get() + 1)
        if counter3.get() > 26:
            counter3.set(1)
            counter2.set(counter2.get() + 1)
        if counter2.get() > 26:
            counter2.set(1)
            counter1.set(counter1.get() + 1)
        if counter1.get() > 26:
            counter1.set(1)
            counter3.set(counter3.get() + 1)
        return counter1.get(), counter2.get(), counter3.get()

    def sub1(self):
        counter1 = self.variable1
        counter1.set(counter1.get() - 1)
        if counter1.get() < 1:
            counter1.set(26)
        return counter1.get()
    def sub2(self):
        counter2 = self.variable2
        counter2.set(counter2.get() - 1)
        if counter2.get() < 1:
            counter2.set(26)
        return counter2.get()
    def sub3(self):
        counter3 = self.variable3
        counter3.set(counter3.get() - 1)
        if counter3.get() < 1:
            counter3.set(26)
        return counter3.get()
class Main(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        counter1 = Store1()
        counter2 = Store1()
        counter3 = Store1()
  def all_counters1():
            counter1.add1()
            counter2.add1()
            counter3.add1()
        def all_counters2():
            counter1.add2()
            counter2.add2()
            counter3.add2()
        def all_counters3():
            counter1.add3()
            counter2.add3()
            counter3.add3()

        tk.Button(self, width=10, text="Increase", command=all_counters1, fg="blue", bg = "white").grid(column=0, row=0, padx=20, pady=(10,0))
        tk.Label(self, width=5, height=2, textvariable=counter1.variable1, bg = "white", font = "Verdana 16 bold").grid(column=0,row=1,padx=20, pady=10)
        tk.Button(self, width=10, text="Decrease",command=lambda: counter1.sub1(), fg="blue", bg = "white").grid(column=0, row=2, padx=20, pady=10)
        tk.Button(self, width=10, text="Increase", command=all_counters2, fg="blue", bg = "white").grid(column=1, row=0, padx=10,pady=(10,0))
        tk.Label(self, width=5, height=2, textvariable=counter2.variable2, bg = "white", font = "Verdana 16 bold").grid(column=1, row=1, padx=10,pady=10)
        tk.Button(self, width=10, text="Decrease", command=lambda: counter2.sub2(), fg="blue", bg = "white").grid(column=1, row=2, padx=10,pady=10)
        tk.Button(self, width=10, text="Increase", command=all_counters3, fg="red", bg = "white").grid(column=2, row=0, padx=10, pady=(10,0))
        tk.Label(self, width=5, height=2, textvariable=counter3.variable3, bg = "white", font = "Verdana 16 bold").grid(column=2, row=1, padx=10,pady=10)
        tk.Button(self, width=10, text="Decrease", command=lambda: counter3.sub3(), fg="red", bg = "white").grid(column=2, row=2, padx=10,pady=10)
root = Main()
root.mainloop()

一个这样的例子至少达到了我认为你想要的一些效果。

import sys
if sys.version_info[0] < 3:
    import Tkinter as tk     ## Python 2.x
else:
    import tkinter as tk     ## Python 3.x
from functools import partial
def change_counter(var, amount, number):
   result=var.get()
   result += amount
   if result > 26 or result < 0:
      if number==2:
         print "number 3 is >= 26 or < 0"
      result=0
   var.set(result)
top=tk.Tk()
colors=["blue", "orange", "green"]
for ctr in range(3):
    variable = tk.IntVar()
    tk.Button(top, width=10, text="Increase",
         command=partial(change_counter, variable, +1, ctr),
         fg=colors[ctr], bg="white").grid(column=ctr, row=0,
         padx=20, pady=(10,0))
    tk.Label(top, width=5, height=2, textvariable=variable,
         bg="white", font="Verdana 16 bold").grid(column=ctr,
         row=1,padx=20, pady=10)
    tk.Button(top, width=10, text="Decrease",
          command=partial(change_counter, variable, -1, ctr), fg=colors[ctr],
          bg="white").grid(column=ctr, row=2, padx=20, pady=10)
top.mainloop()

最新更新