我正在尝试创建一个GUI界面,其中包含用于发送员工日常报告的按钮。我已经走得很远,但我现在完全陷入困境,我能够创建按钮和其他所有内容,但我似乎无法将其写入Tkinter文本小部件。 这是脚本 -
from tkinter import*
import random
import time;
import sys
root = Tk()
root.geometry("1600x800+0+0")
root.title("Report system")
text_Input = StringVar()
ADD = "0"
Tops = Frame(root, width = 1600,height = 700, relief=SUNKEN)
Tops.pack(side=TOP)
f1 = Frame(root, width = 650,height = 700, relief=SUNKEN)
f1.pack(side=RIGHT)
f2 = Frame(root, width = 950,height = 700, relief=SUNKEN)
f2.pack(side=LEFT)
#======================Time==================================================
localtime=time.asctime(time.localtime(time.time()))
#============================Info============================================
TitleH = Label(Tops, font=('arial', 60, 'bold'),text="COMPANY", fg="blue4",bd=10, anchor='w')
TitleH.configure(background = "powder blue")
TitleH.grid(row=0, column=0)
TitleT = Label(Tops, font=('arial', 60, 'bold'),text=localtime, fg="blue4",bd=10, anchor='w')
TitleT.configure(background = "powder blue")
TitleT.grid(row=1, column=0)
#==========================Buttondef=======================
def btnClick(PrimeOperator):
global operator
operator = str(PrimeOperator)
text_Input.set(PrimeOperator)
textDisplay = Entry(f2, font=('arial', 20, 'bold'), textvariable=text_Input, bd=30, insertwidth=4,
bg="powder blue", justify='center')
textDisplay.grid(columnspan=4)
#============================text===========================================
statusDisplay = Text(f1, font=('arial', 20, 'bold'), bd=60, width = 30, height = 10,
bg="powder blue")
statusDisplay.grid(columnspan=4)
btnadd=Button(f2,padx=16,pady=16,bd=8, fg="black", font=("arial",20,'bold'),
text="add", bg="powder blue", command=lambda: statusDisplay.insert(INSERT, 'text_input').grid(row=4,column=2))
#===================OPERATOR=================================
btnop19=Button(f2,padx=16,pady=16,bd=8, fg="black", font= ("arial",20,'bold'),
text="OpTH19", bg="powder blue", command=lambda: btnClick("OpTH19")).grid(row=2,column=0)
btnop18=Button(f2,padx=16,pady=16,bd=8, fg="black", font=("arial",20,'bold'),
text="OpTH18", bg="powder blue", command=lambda:
btnClick("OpTH18")).grid(row=2,column=1)
btnop8=Button(f2,padx=16,pady=16,bd=8, fg="black", font=("arial",20,'bold'),
text="OpTH08", bg="powder blue", command=lambda:
btnClick("OpTH8")).grid(row=2,column=2)
btnop7=Button(f2,padx=16,pady=16,bd=8, fg="black", font=("arial",20,'bold'),
text="OpTH07", bg="powder blue", command=lambda:
btnClick("OpTH7")).grid(row=3,column=0)
btnop5=Button(f2,padx=16,pady=16,bd=8, fg="black", font=("arial",20,'bold'),
text="OpTH05", bg="powder blue", command=lambda:
btnClick("OpTH5")).grid(row=3,column=1)
btnop4=Button(f2,padx=16,pady=16,bd=8, fg="black", font=("arial",20,'bold'),
text="OpTH04", bg="powder blue", command=lambda:
btnClick("OpTH4")).grid(row=3,column=2)
btnop3=Button(f2,padx=16,pady=16,bd=8, fg="black", font=("arial",20,'bold'),
text="OpTH03", bg="powder blue", command=lambda: btnClick("OpTH3")).grid(row=4,column=1)
#=================================status======================================
btnontime=Button(f2,padx=16,pady=16,bd=8, fg="black", font= ("arial",20,'bold'),
text="On time", bg="powder blue", command=lambda: btnClick("On Time")).grid(row=2,column=3)
btnlate=Button(f2,padx=16,pady=16,bd=8, fg="black", font=("arial",20,'bold'),
text="Is Late", bg="powder blue", command=lambda: btnClick("Late")).grid(row=3,column=3)
btnonleave=Button(f2,padx=16,pady=16,bd=8, fg="black", font= ("arial",20,'bold'),
text="On leave", bg="powder blue", command=lambda: btnClick("On leave")).grid(row=4,column=3)
#=================================Print=======================================
btnadd=Button(f2,padx=16,pady=16,bd=8, fg="black", font=("arial",20,'bold'),
text="add", bg="powder blue",
command='C').grid(row=4,column=2)
root.mainloop()
所以基本上我会先点击ontime然后我想点击添加,这样它就会在左侧增加一个Tkinter文本的时间。然后我会点击按时出现的操作,然后点击为每个操作添加。所以我希望它看起来像:
ontime opth3 opth4等..等等。
答案 0 :(得分:0)
为添加按钮编写一个函数来调用而不是“C”。例如:
def addfunction(event=None):
statusDisplay.insert(END, operator)
您还需要一些验证代码,以确保全局变量运算符未定义或类型错误。此外,跟踪已经记录了哪些OP可能会很好,因此您永远不会多次记录OP。
补充说明: 确保全局变量运算符未定义的最简单方法是在首次使用之前设置正确类型的默认值。
operator = ''
否则,您可以使用if type(operator) == str
检查字符串的变量类型。其他类型的语法相同。用于检查变量是否存在
可以使用try
子句。
至于跟踪输入,我不确定你想要什么。这也是你需要花一些时间思考的东西。让我举个例子:
statusDisplay
中的输出应该用空格,制表符,逗号分隔吗?如果“准时”出现在第一行或不重要,这是否重要?多线结果好吗?我想要“准时”和“迟到”出现在同一条线上。结果是您将发送到另一个程序或功能,或者保存到文件;他们想要什么格式?
当您决定某个行为时,编写代码并查看输出是否符合您的要求要容易得多。
另外:首先尝试自己实施,如果不起作用,欢迎您寻求进一步的帮助。在此之前:阅读文档和谷歌搜索解决方案。