将孩子放在平移窗口内

Position childs inside a paned window

提问人:bookofproofs 提问时间:9/4/2021 更新时间:11/14/2023 访问量:106

问:

我正在尝试实现一个可调整大小的窗口,其中包含一些小部件,其中一些应该居中,一些应该左对齐。目前,所有小部件都居中:

from tkinter import *

root = Tk()

root.resizable()
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x_cordinate = int((screen_width / 2) - (300 / 2))
y_cordinate = int((screen_height / 2) - (200 / 2))
root.geometry("{}x{}+{}+{}".format(300, 200, x_cordinate, y_cordinate))
root.title("Pane Sticky Test")

main_pane = PanedWindow(root, orient=VERTICAL)
main_pane.pack(fill=BOTH, expand=1)

var = IntVar()

# check = Checkbutton(main_pane, text="My option", variable=var, sticky=W) --> error unknown option "-sticky"
check = Checkbutton(main_pane, text="My option", variable=var)
main_pane.add(check)

# label = Label(main_pane, text="Preview:", sticky=W) --> error unknown option "-sticky"
label = Label(main_pane, text="Preview:")
main_pane.add(label)

entry = Text(main_pane, height=10, width=50)
main_pane.add(entry)
root.mainloop()

Result

我想将我的选项复选框和我的预览标签左对齐。我在本文档中读到,应该有一个粘性选项,该选项“类似于 .grid() 方法的粘性参数”。但是这个选项不起作用(请参阅我注释掉的两行)。

有没有办法在 tkinter 的垂直方向平移窗口内放置一些左对齐或右对齐的小部件?我在 Windows 上使用 tkinter 版本 8.6 和 Tcl/Tk 版本 8.6.9。

特金特

评论


答:

1赞 PCM 9/4/2021 #1

有一个名为 which 函数的选项类似于anchorsticky

为小部件添加参数。例如 -anchor

check = Checkbutton(main_pane, text="My option", variable=var,anchor=W)

您将看到检查按钮位于左侧。

最终代码 -

from tkinter import *

root = Tk()

root.resizable()
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x_cordinate = int((screen_width / 2) - (300 / 2))
y_cordinate = int((screen_height / 2) - (200 / 2))
root.geometry("{}x{}+{}+{}".format(300, 200, x_cordinate, y_cordinate))
root.title("Pane Sticky Test")

main_pane = PanedWindow(root, orient=VERTICAL)
main_pane.pack(fill=BOTH, expand=1)

var = IntVar()

check = Checkbutton(main_pane, text="My option", variable=var,anchor=W)
main_pane.add(check)

label = Label(main_pane, text="Preview:",anchor=W)
main_pane.add(label)

entry = Text(main_pane, height=10, width=50)
main_pane.add(entry)
root.mainloop()

并且不要使用 * 进行导入。更推荐这种方式 - 即使用别名导入import tkinter as tk

参考 - 点以及为什么使用导入 tkinter

-1赞 toyota Supra 11/14/2023 #2

我想放置我的选项复选框和我的预览标签 左对齐。

这个问题是可以解决的。

避免使用通配符 *。使用 ,然后做前缀import tkinter as tktk.

您缺少几个管理器布局。pack()

在前面添加此行 34 到 36。mainloop()

片段,没有小改动,只加了3包(): 将 tkinter 导入为 tk

root = tk.Tk()
root.resizable()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x_cordinate = int((screen_width / 2) - (300 / 2))
y_cordinate = int((screen_height / 2) - (200 / 2))

root.geometry("{}x{}+{}+{}".format(300, 200, x_cordinate, y_cordinate))
root.title("Pane Sticky Test")

main_pane = tk.PanedWindow(root, orient=tk.VERTICAL)
 
var = tk.IntVar()

# check = Checkbutton(main_pane, text="My option", variable=var, sticky=W) --> error unknown option "-sticky"
check = tk.Checkbutton(main_pane, text="My option", variable=var)
main_pane.add(check)
 

# label = Label(main_pane, text="Preview:", sticky=W) --> error unknown option "-sticky"
label = tk.Label(main_pane, text="Preview:")
main_pane.add(label)
 
entry = tk.Text(main_pane, height=10, width=50)
 
main_pane.add(entry)

main_pane.pack(fill=tk.BOTH, expand=1)

check.pack(side=tk.TOP, anchor='nw')
label.pack(side=tk.TOP, anchor='nw')
entry.pack(side=tk.TOP, anchor='nw',fill=tk.BOTH, expand=1)

root.mainloop()
   

截图:

enter image description here