本文主要是想對寫界面以及操作表格遇到的常見問題做個(gè)總結(jié)。前兩篇文章想想對tkinter和pandas這兩個(gè)庫的概述還不夠全面。
如何點(diǎn)擊按鈕彈出新界面
如何在主界面中點(diǎn)擊按鈕從而彈出新界面是做界面設(shè)計(jì)最常遇到的問題。其實(shí)很簡單,在主界面中定義一個(gè)按鈕,然后將按鈕綁定一個(gè)函數(shù),再在這個(gè)函數(shù)中定義新界面。
#!/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='數(shù)據(jù)分析')
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("豆瓣分析系統(tǒng)")
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這個(gè)函數(shù)是沒有參數(shù)的,所以用command綁定的時(shí)候呢不要加括號。至于加了括號會出現(xiàn)什么?會有驚喜你可以試試。
還有一點(diǎn)要注意的是,主界面是root,彈出來的界面叫t1。在主界面的控件里,括號里都先寫了root,而toplevel這個(gè)彈出界面里的所有控件,定義的括號里前面都要改為t1。如果不改,會出現(xiàn)一個(gè)很有意思的事情,就是你本來想彈出的界面,會主動(dòng)加載到主界面上。其實(shí)這也是個(gè)很有意思的功能,在適當(dāng)?shù)臅r(shí)候這么用也很美觀。
grid布局再深入
tk中的三種布局方式中,我最喜歡的是grid,盡管pack也有它的優(yōu)勢。
無論那種布局都無法達(dá)到一下子心滿意足的地步,就像寫前端網(wǎng)頁一樣,不停的在調(diào)整調(diào)整。這里介紹幾個(gè)參數(shù)幫助大家更高效的調(diào)整。
大家都知道column,row,一個(gè)表示列,一個(gè)表示行。不過還有兩個(gè)參數(shù)叫做columnspan,rowspan,這四個(gè)參數(shù)可以兩兩配合使用。比如column=1, columnspan = 4的意思就是從第二列開始,這個(gè)控件占據(jù)四列,就是說第二、三、四、五列都是這個(gè)控件的,下個(gè)控件最多也只能從第六列開始放置了。
sticky這個(gè)參數(shù)是來控制控件對齊的。
from tkinter import *
root = Tk()
root.title("小蛇學(xué)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()
隨便寫一個(gè)界面,它現(xiàn)在是這樣的。

界面太小了,我們把它擴(kuò)大一些。
root.minsize(400, 300)

我們不想讓這兩個(gè)按鈕靠的太近,不美觀。
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)

可以看出來,現(xiàn)在是左對齊。我們想讓它們又對齊。這時(shí)候就需要用到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)

如何讓輸出的dataframe表格更美觀對齊
除了利用juputer notebook之外,還有一個(gè)方法就是把dataframe的表格形式轉(zhuǎn)化為多為數(shù)組,然后以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)
現(xiàn)在很對齊是不是?

我們加多數(shù)據(jù)類型,讓他不好對齊。
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)

大功告成!