Итак, я впервые создаю приложение GUI в Python, используя TKinter, и у меня возникают некоторые проблемы. Во-первых, я попробовал приклеить кнопки и посмотреть на различные решения по переполнению стека, чтобы заставить их придерживаться левой стороны кадра. Но я не могу заставить свои кнопки меню придерживаться по какой-то причине. У меня есть ощущение, что это связано с тем, как я выложил свои столбцы, но я пробовал охватывать столбцы и тому подобное, похоже, это не исправить. Код ниже (кнопки в классе «Настройки» GUI) , а текущий вид клиента ниже:
import tkinter as tk
from tkinter import ttk
from abc import ABC, abstractmethod
root = tk.Tk()
root.title('GUI')
class MUDGUI:
def __init__(self, master):
menuBar = SettingsGUI(self, master)
roomChat = RoomChatGUI(self, master)
#Abstract class that all the chat boxes will inherit from
class ChatGUI(ABC):
@abstractmethod
def sendMessage(self):
print("Send message to server and clear the entry box")
class RoomChatGUI(ChatGUI):
def sendMessage(self):
super().sendMessage()
def __init__(self, parent, master):
self.roomChatFrame = tk.Frame(master)
self.roomChatFrame.grid(row=1)
#Add text display that looks like command line
self.roomChatText = tk.Text(self.roomChatFrame, height=10, width=75, bg="black", fg="white")
self.roomChatText.grid(row=0)
self.roomChatText.insert(tk.END, "Room chat frame")
self.roomChatText.config(state=tk.DISABLED)
#Add input (entry)
self.roomChatEntry = tk.Entry(self.roomChatFrame, width=100, bg="black", fg="white")
self.roomChatEntry.bind('<Return>', sendMessage)
self.roomChatEntry.grid(row=1)
class SettingsGUI:
def __init__(self, parent, master):
self.settingsFrame = tk.Frame(master)
self.settingsFrame.grid(row=0, column=0)
#Need settings menu
self.settingsButton = tk.Button(self.settingsFrame, text="Settings")
self.settingsButton.grid(row=0, column=0, sticky="W")
#Need close button
self.closeButton = tk.Button(self.settingsFrame, text="Close", command=self.settingsFrame.quit)
self.closeButton.grid(row=0, column=1, sticky="W")
gui = MUDGUI(root)
root.mainloop()
GUI со странным размещением кнопок
Другая проблема, с которой я сталкиваюсь, связана с тем, что в поле ввода введите переплет. В RoomChat GUI я пытаюсь связать клавишу ввода с полем ввода, чтобы при нажатии пользователем клавиши «Enter» вызывался метод sendMessage, который должен вызывать его супер sendMessage (определенный в аннотации Чат GUI класс). Однако вместо этого выдает ошибку, что «имя« sendMessage »не определено». Не уверен, что изменить здесь.
Любая и вся помощь будет принята