tkinter 之窗口设计#
我们以 win
表示窗口,则有:
win.attributes("-alpha", value)
: 设定透明度,value取值范围是 \([0, 1]\)。其中 \(0\) 表示完全透明,\(1\) 表示完全不透明。win.winfo_width()
:窗口的宽度win.winfo_height()
:窗口的高度win.geometry("300x300+150+150")
:设置窗体的大小(\(300\times 300\)),与出现的位置距离窗体左上角(\(+150+150\))win.title("标题")
:设置标题win["background"] = "blue"
:设置背景色为“蓝色”win.attributes("-toolwindow", True)
:设置工具栏样式,其中True
只有退出按钮,也没有图标;False
正常的窗体样式win.attributes("-fullscreen", True)
:全屏模式。其中True
全屏;False
正常显示win.attributes("-topmost", 1)
:设置窗体置顶。1
设置顶层窗口,覆盖其它窗口。;0
正常显示,允许其它窗口覆盖win.overrideredirect(True)
:设置成脱离工具栏。True
没有工具栏按钮;False
正常显示
案例1:
import tkinter as tk
# 实例化一个窗体对象
win = tk.Tk()
# 设置窗体的大小(300x300),与出现的位置距离窗体左上角(+150+150)
win.geometry("300x300+150+150")
# 设置标题
win.title("标题")
# 设置图标,以QQ头为例
win.iconbitmap("app.ico")
# 设置背景色,以“蓝色”为例
win["background"] = "blue"
# 设置透明度
win.attributes("-alpha", 0.6)
# 设置窗口为工具样式:
win.attributes("-toolwindow", True)
# # 设置全屏:
win.attributes("-fullscreen", False)
# 设置窗体置顶
win.attributes("-topmost", True)
# 设置成脱离工具栏
win.overrideredirect(False)
# 进入消息循环,显示窗体
win.mainloop()
窗口的三个常用方法#
获取屏幕的大小
win = Tk()
# 获取屏幕的大小;
screen_height = win.winfo_screenheight()
screen_width = win.winfo_screenwidth()
print("你电脑的屏幕的高度是:", screen_height)
print("你电脑的屏幕的宽度度是:", screen_width)
win.mainloop()
获取窗体的大小
需要注意的是:要用 update()
方法,才能看到更新后的数值:
win = Tk()
win.geometry("600x500")
# 更新窗体
win.update()
# 获取屏幕的大小;
win_height = win.winfo_height()
win_width = win.winfo_width()
print("控件的高度是:", win_height)
print("控件的宽度度是:", win_width)
win.mainloop()
获取窗体的位置
win = Tk()
win.geometry("600x500")
def change(event):
win.update()
# 获取窗体的位置
win_x = win.winfo_x()
win_y = win.winfo_y()
print(win_x, win_y)
# 绑定事件,窗体的改变事件
win.bind("<Configure>", change)
win.mainloop()
当用鼠标拖动窗体时,更新了一系列的位置数值
tkinter 弹窗#
参考:https://www.jb51.net/article/119817.htm
可以利用 tkinter 提供的弹窗函数:
::tk_popup --
This procedure pops up a menu and sets things up for traversing
the menu and its submenus.
Arguments:
menu - Name of the menu to be popped up.
x, y - Root coordinates at which to pop up the menu.
entry - Index of a menu entry to center over (x,y).
If omitted or specified as {}, then menu's
upper-left corner goes at (x,y).
def tk_popup(self, x, y, entry=""):
"""Post the menu at position X,Y with entry ENTRY."""
self.tk.call('tk_popup', self._w, x, y, entry)
代码示例:
from tkinter import ttk, Tk, Menu
class App(Tk):
def __init__(self):
super().__init__()
self.popup = self.create_menu()
w = ttk.Label(self, text="Right-click to display menu", width=40)
w.pack()
w.bind("<Button-3>", self.do_popup)
b = ttk.Button(self, text="Quit", command=self.destroy)
b.pack()
def create_menu(self):
popup = Menu(self, tearoff=0)
popup.add_command(label="Next") # , command=next) etc...
popup.add_command(label="Previous")
popup.add_separator()
popup.add_command(label="Home")
return popup
def do_popup(self, event):
# display the popup menu
try:
self.popup.tk_popup(event.x_root, event.y_root, entry=0)
#popup.post(event.x, event.y)
finally:
# make sure to release the grab (Tk 8.0a1 only)
self.popup.grab_release()
if __name__ == '__main__':
root = App()
root.mainloop()
不同的 entry
显示不同的效果: