本文主要是想对写界面以及操作表格遇到的常见问题做个总结。前两篇文章想想对tkinter和pandas这两个库的概述还不够全面。
如何点击按钮弹出新界面
如何在主界面中点击按钮从而弹出新界面是做界面设计最常遇到的问题。其实很简单,在主界面中定义一个按钮,然后将按钮绑定一个函数,再在这个函数中定义新界面。
#!/usr/bin/env python
# _*_coding:utf-8_*_
# Author: DDZZxiaohongdou
from tkinter import *
from tkinter import scrolledtext
import tkinter as tk
def MessageBox():
t1 = Toplevel(height=700, width=700)
t1.title('查询分析界面')
label_analyse = Label(t1, text='数据分析')
label_analyse.grid(row=0)
anaylse_label1 = Label(t1, text='影片属性分析')
anaylse_label1.grid(row=1, column=1, pady=5)
anaylse_label1 = Label(t1, text='影评词云可视化')
anaylse_label1.grid(row=1, column=2, pady=5)
anaylse_label1 = Label(t1, text='影片国家分析')
anaylse_label1.grid(row=1, column=3, pady=5)
root = Tk()
root.title("豆瓣分析系统")
button_final = Button(root, text = '爬虫')
button_final.grid(row = 0, column = 0, padx = 30)
button1 = Button(root,text = '前往查询界面',command = MessageBox)
button1.grid(row = 1, column = 0, padx = 10)
text1 = scrolledtext.ScrolledText(root, width =120, height = 20, wrap=tk.WORD)
text1.grid(row = 0, column = 1, columnspan=4, rowspan=2, sticky=W, padx=100, pady=40)
root.mainloop()
注意,MessageBox这个函数是没有参数的,所以用command绑定的时候呢不要加括号。至于加了括号会出现什么?会有惊喜你可以试试。
还有一点要注意的是,主界面是root,弹出来的界面叫t1。在主界面的控件里,括号里都先写了root,而toplevel这个弹出界面里的所有控件,定义的括号里前面都要改为t1。如果不改,会出现一个很有意思的事情,就是你本来想弹出的界面,会主动加载到主界面上。其实这也是个很有意思的功能,在适当的时候这么用也很美观。
grid布局再深入
tk中的三种布局方式中,我最喜欢的是grid,尽管pack也有它的优势。
无论那种布局都无法达到一下子心满意足的地步,就像写前端网页一样,不停的在调整调整。这里介绍几个参数帮助大家更高效的调整。
大家都知道column,row,一个表示列,一个表示行。不过还有两个参数叫做columnspan,rowspan,这四个参数可以两两配合使用。比如column=1, columnspan = 4的意思就是从第二列开始,这个控件占据四列,就是说第二、三、四、五列都是这个控件的,下个控件最多也只能从第六列开始放置了。
sticky这个参数是来控制控件对齐的。
from tkinter import *
root = Tk()
root.title("小蛇学python")
button_final = Button(root, text = '控件1')
button_final.grid(row = 0, column = 0)
button1 = Button(root,text = '小红豆')
button1.grid(row = 1, column = 0)
root.mainloop()
随便写一个界面,它现在是这样的。
最初.png界面太小了,我们把它扩大一些。
root.minsize(400, 300)
扩大界面后.png
我们不想让这两个按钮靠的太近,不美观。
button_final = Button(root, text = '控件1')
button_final.grid(row = 0, column = 0, padx = 10, pady = 10)
button1 = Button(root,text = '小红豆')
button1.grid(row = 1, column = 0, padx = 10, pady = 10)
扩大上下左右间距.png
可以看出来,现在是左对齐。我们想让它们又对齐。这时候就需要用到sticky了。
button_final = Button(root, text = '控件1')
button_final.grid(row = 0, column = 0, padx = 10, pady = 10,sticky = E)
button1 = Button(root,text = '跌跌撞撞小红豆')
button1.grid(row = 1, column = 0, padx = 10, pady = 10,sticky = E)
右对齐之后.png
如何让输出的dataframe表格更美观对齐
除了利用juputer notebook之外,还有一个方法就是把dataframe的表格形式转化为多为数组,然后以table的形式输出。
data = {'state' : ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
'year' : [2000, 2001, 2002, 2003, 2004,],
'pop' : [12313, 1213, 3131, 1213, 121321]}
frame = DataFrame(data)
print(frame)
现在很对齐是不是?
初始化我们加多数据类型,让他不好对齐。
data = {'state' : ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
'哈哈哈': ['小红豆', '大红豆', '跌跌撞撞', '跌跌撞撞小红豆', '跌跌撞撞大红豆~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'],
'year' : [2000, 2001, 2002, 2003, 2004,],
'pop' : [12313, 1213, 3131, 1213, 121321]}
frame = DataFrame(data)
print(frame)
不对齐
然后怎么办呢?
head = list(frame)
content = frame.values.tolist()
data_output = []
data_output.append(head)
for i in content:
data_output.append(i)
data_output = AsciiTable(data_output)
print(data_output.table)
表格
大功告成!
网友评论