Я пытаюсь сделать графический интерфейс с кнопками для отправки ежедневных отчетов персонала. Я зашел довольно далеко, но теперь я полностью застрял, я могу создавать кнопки и все остальное, но я не могу заставить его писать в текстовый виджет 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, затем я хочу нажать на добавление, чтобы оно добавляло ontime в левую часть, которая является текстом Tkinter. Затем я нажимаю на оп, которая приходит вовремя, и нажимаю добавить для каждой операции. Итак, я хочу, чтобы это выглядело так:
ontime opth3 opth4 и т. д. и т. д.
Итак, проблема в том, чтобы получить текст из Entry и добавить его в текстовый виджет? Другими словами, 99% этого кода не имеет отношения к проблеме и может / должно быть удалено?
:( Биффен, ты имеешь в виду заголовок моей темы или заголовок моего кода, потому что я изменил его, так как это было название компании, но это мой заголовок темы, тогда мне жаль тебя, что ты считаешь это бесполезным. < 3
Спасибо тем, кто помогал редактировать мой вопрос. Я все еще новичок в этом и все еще учусь, только начал писать на Python около недели.






Напишите функцию для вызова кнопки Добавлять вместо "C". Например:
def addfunction(event=None):
statusDisplay.insert(END, operator)
Вам также понадобится некоторый проверяющий код, чтобы убедиться, что глобальная переменная оператор не является неопределенной или имеет неправильный тип. Также может быть полезно отслеживать, какие OP уже зарегистрированы, чтобы вы никогда не регистрировали OP несколько раз.
Дополнительное объяснение: Самый простой способ убедиться, что глобальная переменная оператор не является неопределенной, - это установить значение по умолчанию правильного типа перед ее первым использованием.
operator = ''
В противном случае вы можете проверить тип переменной с помощью if type(operator) == str для строк. Такой же синтаксис для других типов. Чтобы проверить, существует ли переменная, вы
можно использовать предложение try.
Что касается отслеживания входных данных, я не совсем уверен, что именно вы хотите. Это также то, о чем вам придется подумать некоторое время. Приведу пример:
Должны ли выходы в statusDisplay разделяться пробелами, табуляциями, запятыми? Важно ли, если «вовремя» стоит первым в строке, или это не имеет значения? Подходят ли многострочные результаты? Хочу ли, чтобы «вовремя» и «опоздал» появились в одной строке? Вы отправите результаты в другую программу или функцию или, возможно, сохраните в файл; какой формат они захотят?
Когда вы определились с поведением, гораздо проще написать код и посмотреть, соответствует ли результат вам.
Также: попробуйте сначала реализовать это самостоятельно, и если это не сработает, вы можете попросить дополнительную помощь. Прежде чем это сделать: прочтите документацию и найдите решения в Google.
спасибо figbeam, который мне очень помог, я все еще новичок в этом, если вы можете, вы можете объяснить мне проверяющий код и прочее, потому что я понятия не имею, что они из себя представляют, но все равно вы довольно решаете мои проблемы, спасибо.
Спасибо, что объяснили мне это, я постараюсь написать это, а для statusDisplay я хочу, чтобы он выглядел примерно так: Доброе утро, мы начали утреннюю смену (11:00 - 19:00). Сегодня рабочих 5 человек. Их идентификаторы - op_th_th19, op_th_th14, op_th_th12, op_th_th15, op_th_th24. Поздние идентификаторы - идентификаторы при отпуске - это текст, который я копирую, вставляю и сообщаю в групповой чат каждый день. Я просто хочу сделать это так, чтобы мне не приходилось постоянно менять операторов (персонал), которые приходят каждый день, а также я хочу, чтобы их было больше. так что да, это будет на отдельной строке.
Какое бесполезное название!