小蛇學python(10)tkinter和pandas的補充

本文主要是想對寫界面以及操作表格遇到的常見問題做個總結。前兩篇文章想想對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也有它的優(yōu)勢。

無論那種布局都無法達到一下子心滿意足的地步,就像寫前端網頁一樣,不停的在調整調整。這里介紹幾個參數幫助大家更高效的調整。

大家都知道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)
表格

大功告成!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,039評論 25 709
  • ¥開啟¥ 【iAPP實現進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,330評論 0 17
  • 1.ios高性能編程 (1).內層 最小的內層平均值和峰值(2).耗電量 高效的算法和數據結構(3).初始化時...
    歐辰_OSR閱讀 30,241評論 8 265
  • 曾多次郝凡助教與玉民助教勸說讓我戒煙,但我一直避開與無視這個問題。也經常會對自己說戒煙沒納入宣言之內,身處于夜...
    羅劍華閱讀 113評論 2 1
  • 她回復我一句回不去了…… 卻讓我思緒萬千…… 但愿不是我自己想太多了,可事實就是我想了很多很多…… 半夜將近一點,...
    靜墨染允閱讀 720評論 1 1

友情鏈接更多精彩內容