我一直在和Tkinter玩弄,想出了这个:
import unittest
class TestHelp(unittest.TestCase):
def setUp(self):
self.helper = Helper()
def test_create_list_raise_type_error(self):
with self.assertRaises(TypeError):
self.helper.create_list('', 'somename', 'sometype', 'somedescription')
with self.assertRaises(TypeError):
self.helper.create_list(1, 1, 'sometype', 'somedescription')
with self.assertRaises(TypeError):
self.helper.create_list(1, 'somename', 1, 'somedescription')
with self.assertRaises(TypeError):
self.helper.create_list(1, 'somename', 'sometype', 1)
我想知道如何将from tkinter import *
root = Tk()
def red_color_change():
color_label.configure(fg="red")
def blue_color_change():
color_label.configure(fg="blue")
red_button = Button(root, text="Red", fg="red", font="Arial, 20",
command=red_color_change)
red_button.grid(row=0, column=0)
blue_button = Button(root, text="Blue", fg="blue", font="Arial, 20",
command=blue_color_change)
blue_button.grid(row=0, column=1)
color_label = Label(root, text="Color", font="Arial, 20")
color_label.grid(row=1, columnspan=2)
root.mainloop()
和red_color_change
简化为一个函数。目的是通过一种功能更改彩色文本的颜色。
答案 0 :(得分:2)
为什么不使用lambda表达式?
def color_change(color):
color_label.configure(fg=color)
red_button = Button(root, text="Red", fg="red", font="Arial, 20")
red_button.grid(row=0, column=0)
red_button.bind('<Button-1>', lambda e: color_change('red'))
blue_button = Button(root, text="Blue", fg="blue", font="Arial, 20")
blue_button.grid(row=0, column=1)
blue_button.bind('<Button-1>', lambda e: color_change('blue'))
可以。
答案 1 :(得分:0)
您可以使用对/错或数字(以另一种方式)。
def color_change(which): #can be integer or boolean
if which == 1: #can be changed to true
color_label.configure(fg='red')
elif which == 2: #can be changed to false
color_label.configure(fg='blue')
red_button = Button(root, text="Red", fg = "red", font="Arial, 20", command = lambda: color_change(1))
blue_button = Button(root, text="Blue", fg = "blue", font="Arial, 20", command = lambda: color_change(2))
尽管使用整数更好,因为您可以支持更多颜色(不只是2种,带有true / false)
答案 2 :(得分:0)
您可以简化程序,使其仅使用一个按钮和一项功能来切换颜色:
import tkinter as tk
def toggle_color():
global color_index
color_index = (color_index + 1) % 2
color_label.configure(fg=colors[color_index])
if __name__ == '__main__':
root = tk.Tk()
colors = ['blue', 'red']
color_index = 0
toggle_button = tk.Button(root, text="toggle", fg="black", font="Arial, 20",
command=toggle_color)
toggle_button.grid(row=0, column=0)
color_label = tk.Label(root, text="Color", font="Arial, 20")
color_label.grid(row=1, column=0)
root.mainloop()
答案 3 :(得分:0)
您确实可以使用其他问题的lambda
建议,通过直接传递颜色来使此过程更短,甚至更好,使按钮创建自动化:
from tkinter import *
root = Tk()
def color_change(color):
color_label.configure(fg=color)
for i,color in enumerate(('red','blue')):
button = Button(root, text=color.title(), fg=color, font="Arial, 20",
command=lambda c=color: color_change(c))
button.grid(row=0, column=i)
color_label = Label(root, text="Color", font="Arial, 20")
color_label.grid(row=1, columnspan=2)
root.mainloop()
请注意,由于颜色参考发生更改,因此现在需要关闭lambda。如果出于某种原因需要保存按钮引用,则还需要一个按钮列表。现在可以轻松添加颜色,并且代码中不需要多余的行。
此外,将所有内容都放在一个类中也是一种好习惯(特别是当您的应用程序变大时)。