Как разместить элементы / виджеты внутри других классов, используя tkinter и python oop - PullRequest
0 голосов
/ 22 октября 2018

Я изо всех сил пытаюсь найти способ добавить цветную рамку под каждой кнопкой в ​​зависимости от того, какая из них нажата.Используя tkinter и python3, я хочу использовать классы, чтобы добавить красное поле под кнопкой 1, если на него нажали, или зеленое поле под кнопкой 2, если на него нажали.Я также хочу, чтобы он находился внутри соответствующих рамок, в которых размещена каждая кнопка. Какие у меня варианты здесь?Цени любую поддержку:)

import tkinter as tk

class MyDialog:
    def __init__(self, parent):
        top = self.top = tk.Toplevel(parent)
    self.myLabel = tk.Label(top, text='Enter Name')
        self.myLabel.pack()

        self.myEntryBox = tk.Entry(top)
        self.myEntryBox.pack()

        self.mySubmitButton = tk.Button(top, text='Press', command=self.send)
        self.mySubmitButton.pack()

    def send(self):
        global username
        username = self.myEntryBox.get()
        self.top.destroy()

def onClick():
    inputDialog = MyDialog(root)
    root.wait_window(inputDialog.top)
    print('Username: ', username)

class MainWindow:

    def __init__(self, master):

        mainLabel = tk.Label(root, text='Main Window')
        mainLabel.pack()

        button1_frame = tk.Frame()
        button1_frame.pack()

        mainButton = tk.Button(root, text='Button 1', command=onClick, width=20)
        mainButton.pack(side=tk.LEFT)

        button_frame2 = tk.Frame()
        button_frame2.pack()

        mainButton2 = tk.Button(root, text='Button 2', command=onClick, width=20)
        mainButton2.pack(side=tk.LEFT)


root = tk.Tk()
app = MainWindow(root)
root.mainloop()

1 Ответ

0 голосов
/ 22 октября 2018

В вашем вопросе много неясного, но надеюсь, что я понимаю, что вы хотите:

  1. Вы хотите указать цветом, какая кнопка нажата.

Вы должны привязать событие к кнопке и использовать метод config для изменения цвета фона.

Вы хотите, чтобы кнопки находились внутри созданных вами рамок, а не в самом корневом окне.

Вы правильно инициализировали рамку, но не установили родительский элемент для рамки, а такжеВы используете рамку в качестве родителя кнопок.

Так что вы можете изменить свой код так, чтобы он был больше похож на:

class MainWindow:

def __init__(self, master):

    mainLabel = tk.Label(root, text='Main Window')
    mainLabel.pack()

    button1_frame = tk.Frame(root)
    button1_frame.pack()

    mainButton = tk.Button(button1_frame, text='Button 1', command=onClick, width=20)
    mainButton.bind('<Button-1>', lambda event: mainButton.config(bg='red'))
    mainButton.pack(side=tk.LEFT)

    button_frame2 = tk.Frame(root)
    button_frame2.pack()

    mainButton2 = tk.Button(button_frame2, text='Button 2', command=onClick, width=20)
    mainButton2.bind('<Button-1>', lambda event: mainButton2.config(bg='green'))
    mainButton2.pack(side=tk.LEFT)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...