Python 채 팅 방 인터페이스 구현 예제 코드(tkinter,Mysql,Treading,socket)

머리말
저 는 대상 을 대상 으로 쓴 것 입 니 다.인터페이스 기능 모듈 을 클래스 로 밀봉 한 다음 에 클 라 이언 트 에서 대상 을 만 든 다음 에 호출 합 니 다.장점 은 우리 가 코드 를 유지 하고 해당 하 는 정 보 를 포장 하 는 데 편리 하 다 는 것 이다.모든 인 스 턴 스 는 각각 다르다.
모든 인터페이스 단추 처리 사건 은 클 라 이언 트 에 있 습 니 다.인터페이스 대상 을 만 들 때 클 라 이언 트 의 처리 사건 함 수 를 만 드 는 대상 의 매개 변수 로 한 다음 에 버튼 에 이 함 수 를 연결 합 니 다.단 추 를 누 르 면 함 수 를 되 돌려 줍 니 다.
2.로그 인 인터페이스 실현
로그 인 인터페이스 모듈 chatlogin_panel.py

from tkinter import *  #     ,    GUI  

#      
class LoginPanel:

    #     ,           ,    main   ,        
    def __init__(self, handle_login, handle_register, close_login_window):
        #          
        self.handle_login = handle_login
        self.handle_register = handle_register
        self.close_login_window = close_login_window

    #            
    def show_login_panel(self):
        #         ,        
        global login_frame
        global frames
        global imgLabel
        global numIdx

        self.login_frame = Tk()  #      
        #       
        self.login_frame.configure(background="white")
        login_frame = self.login_frame  #       

        #           ,       socket  
        self.login_frame.protocol("WM_DELETE_WINDOW", self.close_login_window)

        #       ,  
        screen_width = self.login_frame.winfo_screenwidth()
        screen_height = self.login_frame.winfo_screenheight()
        #     ,    
        width = 503
        height = 400
        #            
        gm_str = "%dx%d+%d+%d" % (width, height, (screen_width - width) / 2,
                                  (screen_height - 1.2 * height) / 2)
        self.login_frame.geometry(gm_str)  #       
        self.login_frame.title("  ")   #       
        #           
        self.login_frame.resizable(width=False, height=False)

        numIdx = 10  # gif   
        #         
        frames = [PhotoImage(file='login.gif', format='gif -index %i' % (i)) for i in range(numIdx)]
        #     gif   
        imgLabel = Label(self.login_frame, height=400, width=500)
        #        
        imgLabel.place(x=-252, y=-200, relx=0.5, rely=0.5, relwidth=1, relheigh=0.5)

        #          
        Label(login_frame, text="  :", font=("  ", 12), bg="white", fg="grey") \
            .place(x=110, y=230)
        Label(login_frame, text="  :", font=("  ", 12), bg="white", fg="grey") \
            .place(x=110, y=260)

        #          
        self.user_name = StringVar()
        self.password = StringVar()

        #         
        self.entry1=Entry(login_frame,  textvariable=self.user_name, fg="black", width=25)
        self.entry1.place(x=180, y=230)
        self.entry2=Entry(login_frame, textvariable=self.password, show='*', fg="black", width=25)
        self.entry2.place(x=180, y=260)

        #          ,     handle_register  
        self.button_register = Button(login_frame, text="    ", relief=FLAT, bg='white', fg='grey',
                             font=('  ', 15), command=self.handle_register).place(x=0, y=370)

        self.login_frame.bind('<Return>', self.handle_login)  #      
        #          ,     handle_login  
        self.button_login = Button(login_frame, text="  ", bg="#00BFFF", fg="white", width=21, height=2,
                                font=('  ', 15), command=lambda: self.handle_login(self))
        self.button_login.place(x=160, y=300)

    #      ,    gif  
    @staticmethod
    def update(idx):
        frame = frames[idx]
        idx += 1  #       
        imgLabel.configure(image=frame)
        login_frame.after(200, LoginPanel.update, idx % numIdx)  # 200             

    #        ,    mainloop        
    def load(self):
        LoginPanel.update(0)
        self.login_frame.mainloop()

    #           
    def close_login_panel(self):
        if self.login_frame == None:
            print("     ")
        else:
            #       
            self.login_frame.destroy()

    #               
    def get_input(self):
        return self.user_name.get(), self.password.get()
위의 모듈 은 로그 인 인터페이스 를 클래스 로 밀봉 하면 클 라 이언 트 에서 많은 인 스 턴 스 를 만 들 수 있 고 모든 인 스 턴 스 는 로그 인 인터페이스 에 대응 합 니 다.
메모:위의 모듈 은 클 라 이언 트 에 게 호출 되 었 습 니 다.직접 실행 하면 효과 가 없습니다.다음은 클 라 이언 트 호출 로그 인 모듈 에 표 시 된 효 과 를 드 립 니 다.
在这里插入图片描述
3.등록 인터페이스 실현
등록 인터페이스 모듈 chatlogin_panel.py

from tkinter import *  #     ,    GUI  
from PIL import Image  #         

#      
class RegisterPanel(object):

    #     ,           ,    main   ,        
    def __init__(self, file_open_face, close_register_window, register_submit):
        #          
        self.file_open_face = file_open_face
        self.close_register_window = close_register_window
        self.register_submit = register_submit
        self.file_name = ""  #     

    #            
    def show_register_panel(self):
        #         ,        
        global register_frame
        global frames
        global imgLabel
        global numIdx

        #      
        self.register_frame = Tk()
        register_frame = self.register_frame  #       
        #       
        self.register_frame.configure(background="white")
        #       ,  
        screen_width = self.register_frame.winfo_screenwidth()
        screen_height = self.register_frame.winfo_screenheight()
        #     ,    
        width = 503
        height = 400
        #            
        gm_str = "%dx%d+%d+%d" % (width, height, (screen_width - width) / 2,
                                  (screen_height - 1.2 * height) / 2)
        #       
        self.register_frame.geometry(gm_str)
        #       
        self.register_frame.title("  ")
        #           
        self.register_frame.resizable(width=False, height=False)

        self.p1 = PhotoImage(file='      .png')  #       PhotoImage  

        numIdx = 9  # gif   
        #         
        frames = [PhotoImage(file='register.gif', format='gif -index %i' % (i)) for i in range(numIdx)]
        #     gif   
        imgLabel = Label(self.register_frame, height=400, width=500)
        #        
        imgLabel.place(x=-252, y=-200, relx=0.5, rely=0.5, relwidth=1, relheigh=0.5)

        #      ,      
        self.face_show = Text(self.register_frame, bg="white", height=3.5, width=7,
                                 highlightcolor="white")
        #          
        self.face_show.config(state=DISABLED)
        #         
        self.face_show.place(x=370, y=230)

        #       ,        
        self.width = 50
        self.height = 50
        #     ,                
        img = Image.open("    .png")
        #        
        out = img.resize((self.width, self.height), Image.ANTIALIAS)
        #     ,   png
        out.save(r"  .png", 'png')

        #       PhotoImage  ,        
        self.p2 = PhotoImage(file='  .png')
        #         
        self.face_show.config(state=NORMAL)
        #           
        self.face_show.image_create(END, image=self.p2)
        #          
        self.face_show.config(state=DISABLED)
        #          
        self.face_show.see(END)

        #          
        Label(self.register_frame, text="   :", font=("  ", 12), bg="white", fg="grey") \
            .place(x=60, y=230)
        Label(self.register_frame, text="    :", font=("  ", 12), bg="white", fg="grey") \
            .place(x=60, y=260)
        Label(self.register_frame, text="    :", font=("  ", 12), bg="white", fg="grey") \
            .place(x=60, y=290)

        #      ,  ,      
        self.user_name = StringVar()
        self.password = StringVar()
        self.confirm_password = StringVar()

        #           ,         
        Entry(self.register_frame, textvariable=self.user_name, fg="black", width=30) \
            .place(x=140, y=230)
        Entry(self.register_frame, textvariable=self.password, show="*", fg="black", width=30) \
            .place(x=140, y=260)
        Entry(self.register_frame, textvariable=self.confirm_password, show="*", fg="black", width=30) \
            .place(x=140, y=290)

        #              ,     close_register_window  
        self.botton_quit = Button(self.register_frame, text="  ",  relief=FLAT, bg='white', fg="grey",
                               font=('  ', 15), command=self.close_register_window).place(x=0, y=370)

        self.register_frame.bind('<Return>', self.register_submit)  #           
        #          ,     register.submit  
        self.botton_register = Button(self.register_frame, text="    ", bg="#00BFFF", fg="white", width=27, height=2,
                              font=('  ', 15), command=lambda: self.register_submit(self)).place(x=120, y=330)

        #            ,      file_open_face  
        self.botton_file_open = Button(self.register_frame, image=self.p1, relief=FLAT, bd=0,
                                       command=self.file_open_face).place(x=430, y=230)

    #        ,    gif  
    @staticmethod
    def update(idx):
        frame = frames[idx]
        idx += 1  #       
        imgLabel.configure(image=frame)
        register_frame.after(200, RegisterPanel.update, idx % numIdx)  # 200             

    #        ,    mainloop        
    def load(self):
        RegisterPanel.update(0)
        self.register_frame.mainloop()

    #         
    def add_face(self, file_name):
        self.file_name = file_name
        #     
        img = Image.open(file_name)
        #       
        out = img.resize((self.width, self.height), Image.ANTIALIAS)
        #     ,   png
        out.save(r"  .png", 'png')
        #       PhotoImage
        self.p = PhotoImage(file='  .png')
        #         
        self.face_show.config(state=NORMAL)
        self.face_show.delete('0.0', END)
        #         
        self.face_show.image_create(END, image=self.p)
        #         
        self.face_show.config(state=DISABLED)
        #          
        self.face_show.see(END)

    #           
    def close_register_panel(self):
        if self.register_frame == None:
            print("     ")
        else:
            #       
            self.register_frame.destroy()

    #         、  、        
    def get_input(self):
        return self.user_name.get(), self.password.get(), self.confirm_password.get(), self.file_name
다음은 클 라 이언 트 가 등록 인터페이스 를 어떻게 호출 하 는 지 간단하게 소개 합 니 다.
main 클 라 이언 트 모듈 을 실행 할 때 먼저 chat 를 만 듭 니 다.logiin_panel 의 대상 을 호출 한 후 대상 의 인 스 턴 스 방법 으로 로그 인 인터페이스 를 표시 합 니 다.사용자 가 등록 단 추 를 누 르 면 이벤트 handle 가 실 행 됩 니 다.register 함수,이 함 수 는 main 클 라 이언 트 가 대상 을 만 들 때 매개 변수 로 전 달 된 것 입 니 다.그 후에 클 라 이언 트 에 있 는 handdleregister 함수 에 chat 생 성register_panel 대상,인 스 턴 스 방법 으로 등록 인터페이스 를 표시 합 니 다.다른 호출 은 다음 과 같 습 니 다.
메모:위의 모듈 은 클 라 이언 트 에 게 호출 되 었 습 니 다.직접 실행 하면 효과 가 없습니다.다음은 클 라 이언 트 호출 등록 모듈 에 표 시 된 효 과 를 보 여 줍 니 다.
在这里插入图片描述
4.채 팅 창 실현
채 팅 인터페이스 모듈 chatmain_panel.py

from tkinter import *  #     ,    GUI  
import tkinter.font as tf
import time
import chat_mysql  #     mysql   
from PIL import Image  #         

#     
class MainPanel:

    def __init__(self, user_name, send_message, send_mark, refurbish_user, private_talk, close_main_window):
        print("      ")
        self.user_name = user_name
        self.send_message = send_message
        self.private_talk = private_talk
        self.close_main_window = close_main_window
        #                ,               
        self.dic = {}
        self.ee = 0  #            
        self.send_mark = send_mark
        self.refurbish_user = refurbish_user
        self.mark_flag = ""
        self.face = []

    def show_main_panel(self):
        #       ,           
        global main_frame
        global frames
        global imgLabel
        global numIdx

        #      
        main_frame = Tk()
        #              
        self.main_frame = main_frame
        #        
        self.main_frame.title("python   ")
        #        
        self.main_frame.configure(background="white")
        #             
        self.main_frame.protocol("WM_DELETE_WINDOW", self.close_main_window)
        #     ,             
        width = 1300
        height = 700
        #        ,  
        screen_width = self.main_frame.winfo_screenwidth()
        screen_height = self.main_frame.winfo_screenheight()
        #           
        gm_str = "%dx%d+%d+%d" % (width, height, (screen_width - width) / 2,
                                  (screen_height - 1.2 * height) / 2)
        #        
        self.main_frame.geometry(gm_str)
        #           
        self.main_frame.resizable(width=False, height=False)

        #     ,      PhotoImage,
        self.p1 = PhotoImage(file='    1.png')
        self.p2 = PhotoImage(file='    2.png')
        self.p3 = PhotoImage(file='    3.png')
        self.p4 = PhotoImage(file='    4.png')
        self.p5 = PhotoImage(file='    5.png')
        self.p6 = PhotoImage(file='    6.png')
        self.p7 = PhotoImage(file='    7.png')
        self.p8 = PhotoImage(file='    8.png')
        self.p9 = PhotoImage(file='    9.png')
        self.p10 = PhotoImage(file='    10.png')

        #     ,      PhotoImage
        self.p11 = PhotoImage(file='    .png')
        self.p12 = PhotoImage(file='      .png')

        #      ,            
        self.dic = {'aa**': self.p1, 'bb**': self.p2, 'cc**': self.p3, 'dd**': self.p4, 'ee**': self.p5,
                    'ff**': self.p6, 'gg**': self.p7, 'hh**': self.p8, 'jj**': self.p9, 'kk**': self.p10}

        #          
        self.label1 = Label(self.main_frame, text="                 python      :" + self.user_name + "   "
                                                                                                      "              "
                                                                                                      "      " +
                                                  "                           ", font=("  ", 20), bg="#00BFFF", fg="white")
        self.label1.grid(row=0, column=0, ipady=0, padx=0, columnspan=3, sticky=E+W)

        #        
        friend_list_var = StringVar()  #        
        #         
        self.friend_list = Listbox(self.main_frame, selectmode=NO, listvariable=friend_list_var,
                                   bg="#F8F8FF", fg="#00BFFF", font=("  ", 14),
                                   highlightcolor="white", selectbackground="#00BFFF")
        self.friend_list.grid(row=1, column=0, rowspan=3, sticky=N + S, padx=0, pady=(0, 0))
        self.friend_list.bind('<ButtonRelease-1>', self.private_talk)  #          
        #           
        main_frame.rowconfigure(1, weight=1)  #              ,      
        main_frame.columnconfigure(1, weight=1)  #         

        sc_bar = Scrollbar(self.main_frame, activebackground='red')  #         
        sc_bar.grid(row=1, column=0, sticky=N + S + E, rowspan=3, pady=(0, 3))  #         

        #           
        sc_bar['command'] = self.friend_list.yview
        self.friend_list['yscrollcommand'] = sc_bar.set

        #          
        msg_sc_bar = Scrollbar(self.main_frame)  #      
        msg_sc_bar.grid(row=1, column=1, sticky=E + N + S, padx=(0, 1), pady=1)  #         

        #         
        self.message_text = Text(self.main_frame, bg="white", height=1,
                            highlightcolor="white", highlightthickness=1)
        #             ,                    NORMAL
        self.message_text.config(state=DISABLED)
        #         
        self.message_text.grid(row=1, column=1, sticky=W + E + N + S, padx=(0, 15), pady=(0, 27))

        numIdx = 6  # gif   
        #         
        frames = [PhotoImage(file='main.gif', format='gif -index %i' % (i)) for i in range(numIdx)]
        #     gif   
        imgLabel = Label(self.main_frame, height=400, width=490)
        #        
        imgLabel.grid(row=1, column=2, sticky=W + E + N + S, rowspan=100, padx=(0, 0), pady=(160, 175))

        #             
        msg_sc_bar["command"] = self.message_text.yview
        self.message_text["yscrollcommand"] = msg_sc_bar.set

        #           
        send_sc_bar = Scrollbar(self.main_frame)  #      
        #         
        send_sc_bar.grid(row=2, column=1, sticky=E + N + S, padx=(0, 1), pady=1)

        #      
        self.send_text = Text(self.main_frame, bg="white", height=11, highlightcolor="white",
                         highlightbackground="#444444", highlightthickness=0)
        #      
        self.send_text.see(END)
        #         
        self.send_text.grid(row=2, column=1, sticky=W + E + N + S, padx=(0, 15), pady=0)

        #                 
        send_sc_bar["command"] = self.send_text.yview
        self.send_text["yscrollcommand"] = send_sc_bar.set

        self.main_frame.bind('<Return>', self.send_message)  #           

        #            ,       send_message
        button1 = Button(self.main_frame, command=lambda: self.send_message(self), text="  ", bg="#00BFFF",
                         fg="white", width=13, height=2, font=('  ', 12),)
        button1.place(x=650, y=640)

        #            ,       close_main_window
        button2 = Button(self.main_frame, text="  ", bg="white", fg="black", width=13, height=2,
                              font=('  ', 12), command=self.close_main_window)
        button2.place(x=530, y=640)

        #           ,         express
        botton4 = Button(self.main_frame, command=self.express, image=self.p11, relief=FLAT, bd=0)
        botton4.place(x=214, y=525)

        #            ,     create_window    
        botton5 = Button(self.main_frame, command=self.create_window, image=self.p12, relief=FLAT, bd=0)
        botton5.place(x=250, y=525)

        #              ,     refurbish_user  
        botton5 = Button(self.main_frame, command=self.refurbish_user, text="      ", bg="#00BFFF", fg="white",
                         width=13, height=2, font=('  ', 12),)
        botton5.place(x=40, y=650)

    #        ,    gif  
    @staticmethod
    def update(idx):
        frame = frames[idx]
        idx += 1  #       
        imgLabel.configure(image=frame)
        main_frame.after(100, MainPanel.update, idx % numIdx)  # 100             

    #        ,    mainloop        
    def load(self):
        MainPanel.update(0)
        self.main_frame.mainloop()

    #               
    def create_window(self):
        top1 = Toplevel()  #      
        top1.configure(background="#FFFAFA")  #        
        #       ,  
        screen_width = top1.winfo_screenwidth()
        screen_height = top1.winfo_screenheight()
        #     ,    
        width = 600
        height = 650
        #            
        gm_str = "%dx%d+%d+%d" % (width, height, (screen_width - width) / 2,
                                  (screen_height - 1.2 * height) / 2)
        top1.geometry(gm_str)  #       
        top1.title("    ")  #       
        #           
        top1.resizable(width=False, height=False)

        #       
        title_lable = Label(top1, text="    ", font=('   ', 20, 'bold italic'),
                            fg="white", bg="#00BFFF")
        #           
        title_lable.pack(ipady=10, fill=X)

        #      ,          
        self.chatting_records = Text(top1, bg="white", height=50, highlightcolor="white", highlightthickness=1)
        #     
        self.chatting_records.pack(ipady=10, fill=X)
        #             ,                    NORMAL
        self.chatting_records.config(state=DISABLED)

        #              
        botton = Button(top1,  text="      ", command=self.clear_chatting_records, bg="#00BFFF",
                        fg="white", width=12, height=2, font=('  ', 11))
        botton.place(x=490, y=600)

        #             
        self.show_chatting_records()

    #            
    def show_chatting_records(self):
        #         
        self.chatting_records.config(state=NORMAL)
        #                 
        f = open("C:/Users/Administrator/PycharmProjects/pythonProject/chatting_records/" + self.user_name + ".txt", 'r')
        while True:
            content = f.readline()  #       
            ft = tf.Font(family='    ', size=13)  #            
            #             
            self.chatting_records.tag_config("tag_9", foreground="#00BFFF", font=ft)
            if content != "":  #                   
                self.chatting_records.insert(END, content, 'tag_9')
            else:
                self.chatting_records.config(state=DISABLED)  #            
                return

    #               
    def clear_chatting_records(self):
        #         
        self.chatting_records.config(state=NORMAL)
        self.chatting_records.delete('1.0', END)   #        
        #         ,          
        a = open("C:/Users/Administrator/PycharmProjects/pythonProject/chatting_records/" + self.user_name + ".txt",
                 'w')
        a.write("")  #       ,         
        a.close()  #   
        self.chatting_records.config(state=DISABLED)  #         

    #           
    def sava_chatting_records(self, content):
        #         
        a = open("C:/Users/Administrator/PycharmProjects/pythonProject/chatting_records/" + self.user_name + ".txt", 'a')
        a.write(content)   #     
        a.close()  #   

    #                
    def express(self):
        #   ee   0,      ,       
        if self.ee == 0:
            self.ee = 1   #      1,             
            #                    
            self.b1 = Button(self.main_frame, command=self.bb1, image=self.p1, relief=FLAT, bd=0)
            self.b2 = Button(self.main_frame, command=self.bb2, image=self.p2, relief=FLAT, bd=0)
            self.b3 = Button(self.main_frame, command=self.bb3, image=self.p3, relief=FLAT, bd=0)
            self.b4 = Button(self.main_frame, command=self.bb4, image=self.p4, relief=FLAT, bd=0)
            self.b5 = Button(self.main_frame, command=self.bb5, image=self.p5, relief=FLAT, bd=0)
            self.b6 = Button(self.main_frame, command=self.bb6, image=self.p6, relief=FLAT, bd=0)
            self.b7 = Button(self.main_frame, command=self.bb7, image=self.p7, relief=FLAT, bd=0)
            self.b8 = Button(self.main_frame, command=self.bb8, image=self.p8, relief=FLAT, bd=0)
            self.b9 = Button(self.main_frame, command=self.bb9, image=self.p9, relief=FLAT, bd=0)
            self.b10 = Button(self.main_frame, command=self.bb10, image=self.p10, relief=FLAT, bd=0)
            #         
            self.b1.place(x=207, y=480)
            self.b2.place(x=255, y=480)
            self.b3.place(x=303, y=480)
            self.b4.place(x=351, y=480)
            self.b5.place(x=399, y=480)
            self.b6.place(x=207, y=430)
            self.b7.place(x=255, y=430)
            self.b8.place(x=303, y=430)
            self.b9.place(x=351, y=430)
            self.b10.place(x=399, y=430)
        else:
            #   ee 0         
            self.ee = 0
            self.b1.destroy()
            self.b2.destroy()
            self.b3.destroy()
            self.b4.destroy()
            self.b5.destroy()
            self.b6.destroy()
            self.b7.destroy()
            self.b8.destroy()
            self.b9.destroy()
            self.b10.destroy()

    #             
    def bb1(self):
        self.mark('aa**')  #       ,      

    def bb2(self):
        self.mark('bb**')

    def bb3(self):
        self.mark('cc**')

    def bb4(self):
        self.mark('dd**')

    def bb5(self):
        self.mark('ee**')

    def bb6(self):
        self.mark('ff**')

    def bb7(self):
        self.mark('gg**')

    def bb8(self):
        self.mark('hh**')

    def bb9(self):
        self.mark('jj**')

    def bb10(self):
        self.mark('kk**')

    #            
    def mark(self, exp):  #           ,         
        self.send_mark(exp)  #            
        #           
        self.b1.destroy()
        self.b2.destroy()
        self.b3.destroy()
        self.b4.destroy()
        self.b5.destroy()
        self.b6.destroy()
        self.b7.destroy()
        self.b8.destroy()
        self.b9.destroy()
        self.b10.destroy()
        self.ee = 0  #      0

    #           
    def refresh_friends(self, online_number, names):
        self.friend_list.delete(0, END)   #        
        for name in names:  #         
            self.friend_list.insert(0, name)
        self.friend_list.insert(0, "【  】")  #         
        self.friend_list.itemconfig(0, fg="#00BFFF")  #         
        self.friend_list.insert(0, '     : ' + str(online_number))  #            
        self.friend_list.itemconfig(0, fg="#FF00FF")  #          

    #      ,       ,        ,        
    def show_send_message(self, user_name, content, chat_flag):
        self.message_text.config(state=NORMAL)   #         
        #                 
        title = user_name + " " + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + "
" if content == '* : ' + user_name + ' ': # ft = tf.Font(family=' ', size=13) # # self.message_text.tag_config("tag_1", foreground="#FF00FF", font=ft) self.message_text.insert(END, content + "
", 'tag_1') # self.message_text.config(state=DISABLED) # elif content == '* : ' + user_name + ' ': # ft = tf.Font(family=' ', size=13) self.message_text.tag_config("tag_2", foreground="#DC143C", font=ft) self.message_text.insert(END, content + "
", 'tag_2') self.message_text.config(state=DISABLED) elif user_name == self.user_name: # if chat_flag == "group_chat": # , print("group_chat====" + chat_flag) ft = tf.Font(family=' ', size=13) self.message_text.tag_config("tag_4", foreground="#00BFFF", font=ft) self.message_text.insert(END, title, 'tag_4') self.sava_chatting_records(title) # elif chat_flag == "private_chat": # , print("chat_flag====" + chat_flag) ft = tf.Font(family=' ', size=13) self.message_text.tag_config("tag_5", foreground="#DC143C", font=ft) self.message_text.insert(END, title, 'tag_5') self.sava_chatting_records(title) else: # # if chat_flag == "group_chat": # , print("group_chat====" + chat_flag) ft = tf.Font(family=' ', size=13) self.message_text.tag_config("tag_6", foreground="#008000", font=ft) self.message_text.insert(END, title, 'tag_6') self.sava_chatting_records(title) elif chat_flag == "private_chat": # , print("chat_flag====" + chat_flag) ft = tf.Font(family=' ', size=13) self.message_text.tag_config("tag_7", foreground="#DC143C", font=ft) self.message_text.insert(END, title, 'tag_7') self.sava_chatting_records(title) if content in self.dic: # chat_mysql.LogInformation.fing_face(user_name) # time.sleep(0.3) # , # self.img1 = Image.open(" .png") # # self.out1 = self.img1.resize((50, 50), Image.ANTIALIAS) # , png self.out1.save(r" 1.png", 'png') time.sleep(0.3) # # PhotoImage self.face.append(PhotoImage(file=' 1.png')) # self.message_text.image_create(END, image=self.face[-1]) # self.message_text.insert(END, " : ") self.message_text.image_create(END, image=self.dic[content]) # self.message_text.insert(END, "
") self.message_text.config(state=DISABLED) # self.message_text.see(END) # elif content != '* : ' + user_name + ' ' and content != '* : ' + user_name + ' ': chat_mysql.LogInformation.fing_face(user_name) time.sleep(0.3) # self.img2 = Image.open(" .png") # self.out2 = self.img2.resize((50, 50), Image.ANTIALIAS) # , png self.out2.save(r" 2.png", 'png') time.sleep(0.3) self.face.append(PhotoImage(file=' 2.png')) self.message_text.image_create(END, image=self.face[-1]) self.message_text.insert(END, " : ") ft = tf.Font(family=' ', size=15) self.message_text.tag_config("tag_8", foreground="#000000", font=ft) self.message_text.insert(END, content, 'tag_8') # self.message_text.config(state=DISABLED) # self.message_text.see(END) # self.sava_chatting_records(content) self.sava_chatting_records("------------------------------------------------------------------------------
") # def change_title(self, title): self.label1['text'] = title # def clear_send_text(self): self.send_text.delete('0.0', END) # def get_send_text(self): return self.send_text.get('0.0', END)
메모:위의 모듈 은 클 라 이언 트 에 호출 된 것 으로 실행 에 효과 가 없습니다.아래 는 클 라 이언 트 가 채 팅 인터페이스 모듈 을 호출 하여 표시 하 는 효 과 를 보 여 줍 니 다.아래 효 과 는 단체 채 팅 기능 과 채 팅 방 가입 과 채 팅 방 탈퇴 메 시 지 를 보 여 줍 니 다.
在这里插入图片描述
이로써 모든 인터페이스 가 실현 되 었 습 니 다.이 인터페이스 들 은 클래스 로 밀봉 되 어 단독 모듈 로 나 뉘 었 습 니 다.단독 운행 은 효과 가 없습니다.주 함수,즉 클 라 이언 트 를 통 해 호출 한 다음 에 사용자 의 조작 을 통 해 해당 하 는 호출 을 해 야 합 니 다.
먼저 일 단락 을 짓 고,뒤에 서버 와 socket 클 라 이언 트,메 인 프로그램,Mysql 코드 모듈 을 추가 합 니 다.
파 이 썬 채 팅 방 의 인터페이스 구현 에 관 한 예제 코드(tkinter,Mysql,Treading,socket)에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 채 팅 방 의 인터페이스 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기