Tkinter缺少正论证

时间:2019-05-27 07:47:07

标签: python python-3.x events tkinter

我正在尝试制作一个GUI,当我按数字时会告诉我:1,2,3,4,它可以正常工作,但是当我按下按钮时,它会在后台引发错误消息。看起来像这样

    xception in Tkinter callback
    Traceback (most recent call last):
    File "/usr/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
    File "/usr/lib/python3.7/tkinter/__init__.py", line 749, in callit
    func(*args)
    TypeError: shukkin() missing 1 required positional argument: 'event'

有人可以告诉我,如何使def shukkin(event):停止抛出该错误消息吗?问题出在哪里。

这是代码

from tkinter import *
from tkinter import ttk
from tkinter import font
from tkinter import Button as bt
import time

def quit(*args):
    root.destroy()

def show_time():
    txt.set(time.strftime("%H:%M:%S"))
    root.after(1000, show_time)

def shukkin(event):
    txt2.set("1")
    fm3.after(100, shukkin)
def taikin(event):
    txt2.set("2")
    fm3.after(100, taikin)
def shuuchou(event):
    txt2.set("3")
    fm3.after(100, shuuchou)
def hoka(event):
    txt2.set("4")
    fm3.after(100, hoka)


root = Tk()
root.attributes("-fullscreen", True)
root.configure(background='black')
for i in range(10):
    root.bind(str(1), shukkin)
    root.bind(str(2), taikin)
    root.bind(str(3), shuuchou)
    root.bind(str(4), hoka)
root.bind("<Escape>", quit)
root.bind("x", quit)
root.after(1000, show_time)

fnt = font.Font(family='Helvetica', size=96, weight='bold')
fnt2 = font.Font(family='Helvetica', size=30)
txt = StringVar()
txt.set(time.strftime("%H:%M:%S"))
fm = Frame(root)
fm.configure(background='black')
lbl = ttk.Label(fm, textvariable=txt, font=fnt, foreground="#469aff", background="black").pack(anchor=NW,padx=40, pady=40)
fm.pack(side=LEFT, fill=BOTH)

fm2 = Frame(root)
lbl = ttk.Label(fm2, text="ボタンを押して下さい \n 1:出勤 \n 2:退勤 \n 3:出張 \n 4:その他",
                font=fnt2, foreground="#469aff", background="black").pack(side=RIGHT)
fm2.pack(side=TOP, padx=8, pady=130)


fm3 = Frame(root,  width=500, height=500)
txt2 = StringVar()
but = ttk.Label(fm3, textvariable=txt2, font=fnt, foreground="#469aff", background="black").pack()
fm3.pack(side=TOP)




root.mainloop()

1 个答案:

答案 0 :(得分:1)

您的shukkin将一个事件作为arg,但是after方法没有生成任何事件,因此会出错。

只需对您的shukkin函数进行少量更改即可使event为可选:

def shukkin(event=None):
    txt2.set("1")
    fm3.after(100, shukkin)