如何使用tkinter和python oop将项目/小部件放置在其他类中

时间:2018-10-21 22:39:39

标签: python python-3.x user-interface tkinter

我正在努力寻找一种方法,可以根据所单击的按钮在每个按钮下方添加一个彩色框。使用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 :(得分:0)

关于您的问题有很多不清楚的地方,但希望我理解您想要的是什么:

  1. 您要按颜色指示单击了哪个按钮。

您应将事件绑定到按钮,并使用config方法更改背景色。

  1. 您希望按钮位于您创建的框架中,而不是位于根窗口本身中。

您已经正确初始化了框架,但是您没有为框架设置父级,也没有将框架用作按钮的父级。

因此,您可能需要修改代码,使其更像:

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)