【问题标题】:updating tkinter window for text background changes更新 tkinter 窗口以更改文本背景
【发布时间】:2014-11-20 20:29:53
【问题描述】:

尝试在简单加法测验答案的文本字段中显示绿色或红色背景。 目前在 PyCHarm 中抱怨说: entry.grid_configure(背景=“红色”) 类型错误:grid_configure() 缺少 1 个必需的位置参数:'self' 0

我似乎无法弄清楚这一点。任何帮助表示赞赏。 到目前为止的代码如下:

from tkinter import *
import random

class MainGUI:

def __init__(self):
    window = Tk() # Create the window
    window.title("Addition Quizzer") # Set the title
    #window.width(len(window.title()))

    self.number1 = random.randint(0, 9)
    self.number2 = random.randint(0, 9)

    Label(window, text = "+").grid(row = 2, column = 1, sticky = E)
    Label(window, text = "Answer").grid(row = 3, column = 1, sticky = W)

    self.firstNumber = StringVar()
    Label(window, text = self.number1, justify = RIGHT).grid(row = 1, column = 2)

    self.secondNumber = StringVar()
    Label(window, text = self.number2, justify = RIGHT).grid(row = 2, column = 2)

    self.entry = StringVar()
    Entry(window, textvariable = self.entry, justify = CENTER, width = 4, background = "grey").grid(row = 3, column = 2)


    Button(window, text = "Answer:", command = self.computeAnswer).grid(row = 4, column = 1, sticky = E)
    self.result = StringVar()
    Label(window, textvariable = self.result).grid(row = 4, column = 2)

    window.mainloop() # Create the event loop


def computeAnswer(self):
    self.result.set(format(self.number1 + self.number2))
    if self.entry == self.result:
        self.displayCorrect()
    else:
        self.displayIncorrect()

def displayCorrect(self):
    # self.correctAnswer = "Correct"
    # Label(self.window, text = self.correctAnswer, background = "green", justify = RIGHT).grid(row = 5, column = 2)
    Entry.grid_configure(background = "green")

def displayIncorrect(self):
    # self.incorrectAnswer = "Incorrect"
    # Label(self.window, text = self.incorrectAnswer, background = "red", justify = RIGHT).grid(row = 5, column = 2)
    Entry.grid_configure(background = "red")

MainGUI()

【问题讨论】:

  • 所有类方法都需要在class语句下缩进。我把它留给你。
  • 将行数限制为 80 个字符使代码更易于阅读并粘贴到 80 个字符宽的编辑器中。

标签: python-3.x


【解决方案1】:

如果您已阅读并关注帮助中心材料中的 this,您可以将代码缩减为以下内容,但仍会收到相同的错误消息。

from tkinter import *
Entry.grid_configure()

该消息指的是 Python 实例方法需要一个实例这一事实。这通常通过调用实例而不是类的方法来完成。否则,必须给出一个实例作为第一个参数。考虑

mylist = []
mylist.append(1)
list.append(mylist, 2)
print(mylist)
# [1, 2]

您需要保存对您的输入框的引用。改变

    Entry(window, ..., background = "grey").grid(...)

    self.entry = Entry(window, ..., background = "grey").grid(...)

我不知道调用 .grid_configure(background=color 是否会做你想做的事。 这会的,我相信。

    self.entry['background'] = 'red'

【讨论】:

  • 如果你不明白我的回答,这是正确的,请阅读CPython附带的Python教程中调用方法部分。
猜你喜欢
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
相关资源
最近更新 更多