Tkinter (20) 頂層視窗部件 Toplevel

Jason990420發表於2020-08-19

頂層視窗部件的建立及其選項

可單獨存在的頂層視窗, 具有獨立的視窗管理器, 可以獨立移動和調整大小, 應用程式可以使用任意數量的頂級視窗. 任可部件都可以使用 winfo_toplevel() 方法返回其頂層視窗部件.

top_level = tk.Toplevel(option, ...)
選項 說明
bg or background 背景色
bd or borderwidth 外框寛度, 內定為 0
class_ 分類名
cursor 當滑鼠移到部件處時,所顯示的滑鼠圖示
height 視窗高度
highlightbackground 非聚焦時的聚焦顏色
highlightcolor 聚焦時的聚焦顏色
highlightthickness 聚焦厚度, 內定 1, 0 則無
menu 選單部件
padx 部件左右間隔, 內定為 0 點素
pady 部件上下間隔, 內定為 0 點素
relief 外框花樣
takefocus 一般來說, 視窗不會聚焦, 設 True 可聚焦
width 視窗寛度

頂層視窗部件的方法

方法 說明
aspect(nmin, dmin, nmax, dmax) 限制視窗寛度與長度的比例 [nmin/dmin, nmax/dmax]
deiconify() 還原圖示化的視窗
geometry(newGeometry=None) 設定或還原視窗的大小及位置字串
iconify() 圖示化視窗
lift(aboveThis=None) 上移視窗到最頂層或某一視窗上一層
lower(belowThis=None) 下移視窗到最底層或某一視窗下一層
maxsize(width=None, height=None) 設定或返回視窗最大尺寸
minsize(width=None, height=None) 設定或返回視窗最小尺寸
overrideredirect(flag=None) 設定重寫重定向標誌(override redirect) 為True, 視窗上方的視窗管理器會被移除, 因此視窗管理就不能移動, 改變大小, 圖示化, 關閉視窗. 設定為False 就可以還原; 無引數則返回目前的設定值. 在設定該引數時, 要記得先呼叫update_idletasks() 方法; 如果在進入mainloop() 之前呼叫它,則視窗將在顯示之前被禁用; 在某些Unix 及MacOS 平臺可能不適用
resizable(width=None, height=None) 設定視窗的尺寸可否調整, 或返回視窗可否調整尺寸的 2-tuple 值
state(newstate=None) 設定或返回目前視窗的狀態, ‘normal’/‘iconic’/‘withdraw’
title(text=None) 設定或返回視窗的標題
transient(parent=None) 設定該視窗作為某父視窗的過渡視窗, 內定為該視窗的父視窗. 過渡視窗會在其父視窗之前, 如果父視窗被圖示化, 則它也會被圖示化
withdraw() 隱藏視窗, 可以 deiconify() 或 iconify() 方法來還原

範例視窗及程式碼

Python

import tkinter as tk

def win(text, width, height):
    top_level = tk.Toplevel()
    top_level.title(f'{width}x{height}')
    label = tk.Label(
        top_level, text=text, width=width, height=height,
        wraplength=width*8, anchor=tk.NW, justify=tk.LEFT, borderwidth=5,
        relief=tk.SOLID)
    label.grid(row=0, column=0)
    return top_level, label

root = tk.Tk()
root.wm_title("Toplevel Demo")

font = ('Courier New', 16, 'bold')
t = ('This tutorial introduces the reader informally to the basic '
     'concepts and features of the Python language and system. It '
     'helps to have a Python interpreter handy for hands-on experience'
     ', but all examples are self-contained, so the tutorial can be '
     'read off-line as well.')

win1, label1 = win(t, 100, 20)
win2, label2 = win(t,  80, 25)
win3, label3 = win(t,  60, 35)
win4, label4 = win(t,  50, 40)

root.mainloop()
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Jason Yang

相關文章