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)에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 채 팅 방 의 인터페이스 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.