【发布时间】:2022-12-17 11:25:58
【问题描述】:
问题:我想使用 place 方法,因为它允许 我使用 relx/rely 属性将内容放置在窗口中。因为我在这里使用 tk.Frame,所以我不能使用 place 方法(或者至少我不知道你可以)。还有另一种方法吗?我想使用 place 方法,因为这样放置内容对我来说更容易。代码如下:
import tkinter as tk
class App(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
weightList = ["kilogram", "pound", "ounze"]
distanceList = ["kilometers", "meters", "miles", "yards"]
temperatureList = ["celsius", "fahrenheit", "kelvin"]
self.dict = {'weight': weightList,
'distance': distanceList,
'temperature': temperatureList}
self.variable_a = tk.StringVar(self)
self.variable_b = tk.StringVar(self)
self.variable_a.trace('w', self.update_options)
self.optionmenu_a = tk.OptionMenu(self, self.variable_a, *self.dict.keys())
self.optionmenu_b = tk.OptionMenu(self, self.variable_b, '')
self.variable_a.set('weight')
self.optionmenu_a.pack()
self.optionmenu_b.pack()
self.pack()
def update_options(self, *args):
Units = self.dict[self.variable_a.get()]
self.variable_b.set(Units[0])
menu = self.optionmenu_b['menu']
menu.delete(0, 'end')
for i in Units:
menu.add_command(label=i, command=lambda current=i: self.variable_b.set(current))
win = tk.Tk()
win.title("Unit Converter")
win.geometry("500x300")
win = App(win)
win.mainloop()
如果我用 place 替换 pack,下拉小部件将不会出现:
import tkinter as tk
class App(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
weightList = ["kilogram", "pound", "ounze"]
distanceList = ["kilometers", "meters", "miles", "yards"]
temperatureList = ["celsius", "fahrenheit", "kelvin"]
self.dict = {'weight': weightList,
'distance': distanceList,
'temperature': temperatureList}
self.variable_a = tk.StringVar(self)
self.variable_b = tk.StringVar(self)
self.variable_a.trace('w', self.update_options)
self.optionmenu_a = tk.OptionMenu(self, self.variable_a, *self.dict.keys())
self.optionmenu_b = tk.OptionMenu(self, self.variable_b, '')
self.variable_a.set('weight')
self.optionmenu_a.place(relx = 0.35, rely = 0.1)
self.optionmenu_b.place(relx = 0.75, rely = 0.1)
self.pack()
def update_options(self, *args):
Units = self.dict[self.variable_a.get()]
self.variable_b.set(Units[0])
menu = self.optionmenu_b['menu']
menu.delete(0, 'end')
for i in Units:
menu.add_command(label=i, command=lambda current=i: self.variable_b.set(current))
win = tk.Tk()
win.title("Unit Converter")
win.geometry("500x300")
win = App(win)
win.mainloop()
我尝试单独使用 place 方法,但它不起作用(place 而不是 pack,仅具有 relx/rely 属性)。 我尝试使用 tk.Frame 查找解决方案,但我不明白该怎么做(不知道如何为两者指定宽度/高度)。除此之外,我在理解 tk.Frame 如何与我的代码交互时也遇到了问题(tkinter 的新功能)。
【问题讨论】:
标签: python user-interface tkinter