я учусь Python и создаю GUI программу с Tkinter. Я хочу обновить сообщение в строке состояния 2 раза при нажатии кнопки. 1-е сообщение будет обновляться при нажатии кнопки. 2-е сообщение будет обновлено после успешного завершения работы программы. Проблема в том, что 1-е сообщение вообще не отображается, когда я нажимаю кнопку21
encryption_tab
def encryption_tab(self):
self.input3 = tk.LabelFrame(self.tab1, bg="black", fg='white', text=" Source Image ")
self.input3.pack(expand=1, fill='both', padx=5, pady=5)
self.target_image_path = tk.StringVar()
self.verb_ent = tk.Entry(self.input3, width=55, textvariable=self.target_image_path)
self.verb_ent.pack(side=tk.LEFT, expand=1, fill="both", padx=5, pady=5)
button2 = tk.Button(self.input3, text="Search Image", command=lambda: self.get_path(0))
button2.pack(side=tk.LEFT, padx=5, pady=5)
button2.configure(bg="black", fg='white', activebackground='#0080ff', activeforeground='white')
self.input = tk.LabelFrame(self.tab1, text=" Hide text ", background="black", foreground='white')
self.textvar = tk.StringVar()
self.textbox = tk.Text(self.input, height=5, width=70, wrap='word', undo=True)
self.textbox.pack(expand=1, fill="both", padx=5, pady=5)
self.textbox.bind("<Key>", self.update)
self.counter = tk.StringVar()
self.counter.set('Одоогоор текст: ' +'0'+ ' тэмдэгттэй байна')
self.char_count = tk.Label(self.input, textvariable=self.counter, bg="Black", fg= '#0080ff')
self.char_count.pack(side=tk.LEFT, expand=1, fill="both", padx=5, pady=5)
button21 = tk.Button(self.input, text="hide text", command=lambda: self.hide())
button21.pack(side=tk.RIGHT, padx=5, pady=5)
button21.configure(bg="black", fg='white', activebackground='#0080ff', activeforeground='white')
#guess here's the problem tho
self.input.pack(expand=1, fill="both", padx=5, pady=5)
self.input1 = tk.LabelFrame(self.tab1, bg="black", fg='white', text=" Status ")
self.status_message = tk.StringVar()
self.status_message.set('\n program not yet started \n')
textwidget = tk.Label(self.input1, textvariable=self.status_message, bg='black', fg="white", wraplength=590)
textwidget.configure(relief='flat', state="normal")
textwidget.pack(expand=1, fill="both", padx=5, pady=5)
self.input1.pack(expand=1, fill="both", padx=5, pady=5)
здесь функция hide ()
def hide(self):
#this message is 1st... but not working tho
self.status_update(" program is working...")
#
original_image_file = self.target_image_path.get()
img = Image.open(original_image_file)
import ntpath
encoded_image_file = ntpath.split(original_image_file)[0] + "/enc_" + ntpath.basename(original_image_file)
secret_msg = self.textbox.get("1.0", tk.END)
img_encoded = self.encode_image(img, secret_msg)
if img_encoded:
img_encoded.save(encoded_image_file)
# this is 2nd message.. its working fine
self.status_update("{} хадгалагдсан!".format(encoded_image_file))
if sys.platform == "win32":
os.startfile(encoded_image_file)
else:
opener ="open" if sys.platform == "darwin" else "xdg-open"
subprocess.call([opener, encoded_image_file])
функция status_update ... возможно, это кажется бесполезным ... но я использую эту функцию в других вкладках. и они работают нормально.
def status_update(self, status):
self.status_message.set(status)
когда я вызываю функцию hide (), первое сообщение не обновляется ... после успешной работы программы появляется только второе сообщение ... Кто-то знает проблему? я только что сделал простую ошибку?
извините, мой engli sh не совершенен: {, это мой первый раз, когда я спрашиваю у stackoverflow:)