写智能算法大作业,最后需要做一个UI界面。第一次使用Tkinter,总的来说还算顺利,问题不大,基本都能解决。总之做的还挺成功[doge]
1.由于tkinter的兼容问题,只能显示特定格式的图片,jpg图片需要调用PIL库,用法见下面5的代码。
参考于:https://blog.csdn.net/fjdmy001/article/details/78498150
2.在定义子窗体的时候需要将函数Tk()改成Toplevel()。
3.对于button的调用函数,command()是错误的,要用lambda传参;并且,如果在循环内创建button,command的参数与循环变量有关,要注意冻结变量,否则循环结束变量为固定值,循环出错,所有按钮都显示为最后一次的结果。
参考于:https://blog.csdn.net/weixin_46180926/article/details/107968794
button = tk.Button(top1, image=image, height=100, width=100,
command=lambda i=i: generate(ind_list[i])) # i是循环变量,generate是调用的函数
4.对于button和label,place函数失效,是因为place和pack不能同时使用,把pack去掉就好了。
参考于:https://blog.csdn.net/AshleyXM/article/details/104492553
5.标签背景变为透明,这个直接改变参数是不可行的。但是我猜想,想让标签变透明是因为加了背景图片,那就在图片上写字就好了,还有个问题就是文字只能显示在中间,参数compound设置为center。所以我的解决办法就是让标签和背景图片的颜色一样。。
参考于:https://blog.csdn.net/RNG_uzi_/article/details/89792518
# global image # 如果是函数内的图片,需要定义全局变量
photo = Image.open("C:\\Users\\Lenovo\\Desktop\\bg.jpg") # 打开文件
photo = photo.resize((600, 600)) # 调整图片大小
photo = ImageTk.PhotoImage(image=photo) # PIL处理
bglabel = tk.Label(window, justify='left', image=photo, compound='center') # 背景图片作为标签,注意“compound”
bglabel.image = photo # 要有这句话
bglabel.pack() # pack()打包
lab = tk.Label(window, width=35, height=2, font=('微软雅黑', 12), bg='white',
text='请选择一个你想实现的功能\nChoose one of the following four options') # 文字作为标签
lab.place(x=110, y=75) # 文字标签的位置,并打包
大概就这些问题吧,做的时候有一点点阻碍。还烦请各位批评指正!