Не работают функции и соответственно кнопки в Menu (Tkinter)

Рейтинг: 0Ответов: 0Опубликовано: 02.06.2023

Не работают функции и соответственно кнопки в меню. Не пойму в чем дело ведь когда раньше так делал все работало. Может проблема Код:

import socket
import threading
import tkinter
import tkinter.scrolledtext
from tkinter import simpledialog


class Client:
    def __init__(self):
        msg = tkinter.Tk()
        msg.withdraw()
        self.host = simpledialog.askstring('IP','Please write down IP of the host',parent=msg)
        self.port = simpledialog.askinteger('Port','Please write down Port of the host',parent=msg)
        self.sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.sock.connect((self.host,self.port))
        
        self.c=tkinter.IntVar()
        self.c1=tkinter.IntVar()
        self.c2=tkinter.IntVar()
        self.c4=tkinter.IntVar()
        
        self.c.trace_add("write", self.colorbg)
        self.c1.trace_add("write", self.size)
        self.c2.trace_add("write", self.colorfg)
        self.c4.trace_add("write", self.sizelbl)
        
        self.nickname = simpledialog.askstring('Nickname','Please choose a nickname',parent=msg)
        
        self.gui_done = False
        self.running = True
        
        gui_thread = threading.Thread(target=self.gui_loop)
        receive_thread = threading.Thread(target=self.receive)


        
        gui_thread.start()
        receive_thread.start()
    def gui_loop(self):
        self.win = tkinter.Tk()
        self.win.configure(bg = 'lightgray')
        


        
        self.mainmenu = tkinter.Menu(master = self.win)
        self.bgmenu = tkinter.Menu(master = self.mainmenu)
        self.sizemenu = tkinter.Menu(master = self.mainmenu)
        
        self.mainmenu.add_cascade(label = 'Background color', menu = self.bgmenu)
        self.mainmenu.add_cascade(label = 'Size', menu = self.sizemenu)
        
        self.bgmenu.add_radiobutton(label = 'Red',variable = self.c,value = 1,command = self.colorbg)
        self.bgmenu.add_radiobutton(label = 'Yellow',variable = self.c,value = 2,command = self.colorbg)
        self.bgmenu.add_radiobutton(label = 'Blue',variable = self.c,value = 3,command = self.colorbg)

        self.sizemenu.add_radiobutton(label = 'Small',variable = self.c1,value = 1,command = self.size)
        self.sizemenu.add_radiobutton(label = 'Medium',variable = self.c1,value = 2,command = self.size)
        self.sizemenu.add_radiobutton(label = 'Big',variable = self.c1,value = 3,command = self.size)


        self.fgcol_menu = tkinter.Menu(master = self.mainmenu)
        self.size_lbl = tkinter.Menu(master = self.mainmenu)
        self.mainmenu.add_cascade(label = 'Foreground color',menu = self.fgcol_menu)
        self.mainmenu.add_cascade(label = 'Label size',menu = self.size_lbl)
        


        self.fgcol_menu.add_radiobutton(label = 'Red',variable = self.c2,value = 1,command = self.colorfg)
        self.fgcol_menu.add_radiobutton(label = 'Black',variable = self.c2,value = 2,command = self.colorfg)
        self.fgcol_menu.add_radiobutton(label = 'Blue',variable = self.c2,value = 3,command = self.colorfg)


        self.size_lbl.add_radiobutton(label = 'Arial',variable = self.c4,value = 1,command = self.sizelbl)
        self.size_lbl.add_radiobutton(label = 'Comic sans',variable = self.c4,value = 2,command = self.sizelbl)
        self.size_lbl.add_radiobutton(label = 'Copperplate',variable = self.c4,value = 3,command = self.sizelbl)
        self.win.config(menu= self.mainmenu)


        self.chat_label = tkinter.Label(self.win, text ="Chat", bg = 'lightgray')
        self.chat_label.pack(padx = 20,pady =5)
        
        self.text_area = tkinter.scrolledtext.ScrolledText(self.win)
        self.text_area.pack(padx = 20, pady =5)
        self.text_area.config(state = 'disabled')
        
        self.msg_label = tkinter.Label(self.win, text ="Message", bg = 'lightgray')
        self.msg_label.pack(padx = 20,pady =5)
        
        self.input = tkinter.Text(self.win,height=5)
        self.input.pack(padx = 20,pady = 5)
        
        self.send_btn = tkinter.Button(self.win, text = 'Send', command = self.write)
        self.send_btn.pack(padx = 20,pady=5)
        
        self.gui_done=True
        self.win.protocol('WM_DELETE_WINDOW',self.stop)
        
        self.win.mainloop()
        

    def colorbg(self,*args):
        if self.c.get() == 1:
            self.win.config(bg = 'red')
        elif self.c.get() == 2:
            self.win.config(bg = 'black')
        elif self.c.get() == 3:
            self.win.config(bg = 'blue')



    def size(self,*args):
        if self.c1.get() == 1:
            self.win.geometry('300x300')
        elif self.c1.get() == 2:
            self.win.geometry('500x500')
        elif self.c1.get() == 3:
            self.win.geometry('800x800')
        
        
    def colorfg(self,*args):
        if self.c2.get() == 1:
            self.text_area(fg = f'red')
            self.input(fg = f'red')
        elif self.c2.get() == 2:
            self.text_area(fg = ('yellow'))
            self.input(fg = f'red')
        elif self.c2.get() == 3:
            self.text_area(fg = f'blue')
            self.input(fg = f'red')
        else:
            self.text_area(fg = 'black')  
            self.input(fg = f'red')    
        
    def sizelbl(self,*args):
        if self.c4.get() == 1:
            self.text_area(font = ('Arial'))
            self.input(font = ('Arial'))
        elif self.c4.get() == 2:
            self.text_area(font = ('Comic sans'))
            self.input(font = ('Arial'))
        elif self.c4.get() == 3:
            self.text_area(font = ('Copperplate'))
            self.input(font = ('Arial'))
    def write(self):
        message = f'{self.nickname}: {self.input.get("1.0","end")}'
        self.sock.send(message.encode('utf-8'))
        self.input.delete('1.0','end')
    def receive(self):
        while self.running:
            try:
                message = self.sock.recv(1024).decode('utf-8')
                if message == 'NICK':
                    self.sock.send(self.nickname.encode('utf-8'))
                else:
                    if self.gui_done:
                        self.text_area.config(state = 'normal')
                        self.text_area.insert('end',message)
                        self.text_area.yview('end')
                        self.text_area.config(state='disabled')
            except ConnectionAbortedError:
                break
            except:
                print('Error')
                self.sock.close
                break
    def stop(self):
        self.running = False
        self.win.destroy()
        self.sock.close
        exit(0)
        
client = Client()

Ответы

Ответов пока нет.