これは私の問題です。私はtkinterとソケットを使ってメッセンジャーアプリケーションを作っていますが、私のGUIでは着信メッセージと発信メッセージを表示するためにラベルウィジェットを使用しています。私がしようとしているのは、ラベルに表示されたコードのようなリストから項目を取り出し、それを画面に表示させることです。私は文字列変数を使用してみましたが、それはリストから呼び出し項目を傾けることはできません。私はこのような年齢のように見えるので、誰かが修正やそれを行うためのよりよい方法を知っている場合は私に知らせてください。過去のテキストにTkinterラベルが上書きされます。リストを使用しているので、StringVar()を使用することはできません。
# Easy settings
allow_incoming_connections = True # Allows anyone with your ip and port to connect to you. ('True' or 'False')
con_url = "google.com"
con_ip = ""
con_port = "80"
#Add a IP blocker. sock.deny(idktheactuaulcode)
#Dont mess with the programming... it is barely held together xD
connected = False
from random import randrange
from tkinter import ttk
from tkinter import *
import tkinter as tk, socket, sys, tkinter.messagebox as tm, random
window = Tk()
window.geometry("500x260")
window.resizable(width=FALSE, height=FALSE)
window.iconbitmap(None)#make icon later after coding is done
window.title("Private Messenger")
window.cache = ['TkMessage','- Base 64 data encryption','- /host or /join a chat','- Saving supported','','','- /help for help','','','','Please select an alias:']
window.alias = StringVar()
if con_ip == "":
con_ip = socket.gethostbyname(con_url)
class tkframe(Frame):
def __init__(self, master):
super().__init__(master)
window.bind("<Return>", self.send)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((socket.gethostbyname(socket.gethostname()), 4545))
sock = socket.create_connection((con_ip, con_port),5)
#Variables
self.user_input = StringVar()
self.updatewig()
def updatewig(self):
self.user_input.set("")
input_box = Entry(self, textvariable = self.user_input, width=65).grid(row=12, column=1, sticky=W)
input_button = ttk.Button(self, command = self.send, text="Send").grid(row=12, column=2, sticky=W)
self.textdisp = Label(self, text = window.cache[0]).grid(row=1, column=1, sticky=W)
self.textdisp = Label(self, text = window.cache[1]).grid(row=2, column=1, sticky=W)
self.textdisp = Label(self, text = window.cache[2]).grid(row=3, column=1, sticky=W)
self.textdisp = Label(self, text = window.cache[3]).grid(row=4, column=1, sticky=W)
self.textdisp = Label(self, text = window.cache[4]).grid(row=5, column=1, sticky=W)
self.textdisp = Label(self, text = window.cache[5]).grid(row=6, column=1, sticky=W)
self.textdisp = Label(self, text = window.cache[6]).grid(row=7, column=1, sticky=W)
self.textdisp = Label(self, text = window.cache[7]).grid(row=8, column=1, sticky=W)
self.textdisp = Label(self, text = window.cache[8]).grid(row=9, column=1, sticky=W)
self.textdisp = Label(self, text = window.cache[9]).grid(row=10, column=1, sticky=W)
self.textdisp = Label(self, text = window.cache[10]).grid(row=11, column=1, sticky=W)
self.grid()
def send(self):
#self.textdisp.withdraw()
try:
self.char_check = str(self.user_input.get())[0]
except:
pass
print(self.char_check)
self.command = self.user_input.get()
if self.char_check == "/":
window.cache.append(self.user_input.get())
del window.cache[0]
self.user_input.set("")
self.function()
else:
try:
#send
window.cache.append(("Me> "+self.user_input.get()))
del window.cache[0]
except:
print("Message could not be sent")
print(window.cache)
self.updatewig()
def function(self):
# One long if statement to define all the commands
if self.command == "/host":
window.cache.append(("This command is not yet available."))
del window.cache[0]
elif self.command == "/join":
window.cache.append(("Enter IP:"))
window.con_ip = self.user_input.get()
del window.cache[0]
window.cache.append(("Enter Port:"))
window.con_port = self.user_input.get()
del window.cache[0]
window.cache.append(("Enter alias:"))
window.alias = self.user_input.get()
del window.cache[0]
elif self.command == "/changealias":
window.cache.append(("This command is not yet available."))
del window.cache[0]
elif self.command == "/close":
window.cache.append(("This command is not yet available."))
del window.cache[0]
elif self.command == "/ban":
window.cache.append(("This command is not yet available."))
del window.cache[0]
elif self.command == "/encodeon":
window.cache.append(("This command is not yet available."))
del window.cache[0]
elif self.command == "/encodeoff":
window.cache.append(("This command is not yet available."))
del window.cache[0]
elif self.command == "/commands":
window.cache.append(("This command is not yet available."))
del window.cache[0]
elif self.command == "/mysettings":
window.cache.append(("This command is not yet available."))
del window.cache[0]
elif self.command == "/reset":
window.cache.append(("This command is not yet available."))
del window.cache[0]
FRAME = tkframe(window)
window.mainloop()
私は単にファッションのようにリストにテキストを表示するためにラベルを使用していました。最新のメッセージは最下部にあり、残りは1行上にバンプされます。あなたがテキストを表示するためのより良い方法を知っていれば、私はそれを高く評価します – IronReign