Как закрепить кнопки в Ткинтере слева от рамки - PullRequest
0 голосов
/ 10 марта 2020

Итак, я впервые создаю приложение 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 »не определено». Не уверен, что изменить здесь.

Любая и вся помощь будет принята

1 Ответ

1 голос
/ 10 марта 2020

Кнопки придерживаются левой стороны рамки. Проблема в том, что вы не просили, чтобы рамка прилипала к боковым сторонам окна.

Вам необходимо определить атрибут sticky при добавлении фрейма в окно:

self.settingsFrame.grid(row=0, column=0, sticky="nsew")
...