【发布时间】:2021-11-25 17:51:12
【问题描述】:
对于我目前的 Python 项目,我通常在大学里使用 x 大小的显示器工作,但是当我想在家工作时,我的屏幕要小得多。我的大多数小部件目前都是根据高度和宽度参数调整大小的,所以当我在家工作时,我的 Tkinter 框架已经调整为适合我的工作监视器,对于主屏幕来说太大了,只有大约三分之二然后我的框架内容出现在屏幕上。我正在使用网格几何。
即使小部件没有高度参数也会出现问题,例如,小部件的行数太多,无法适应我的小屏幕。
是否可以缩放 Tkinter 帧,这样当我回家处理项目时,我的窗口会按比例缩小以适应较小的屏幕?
下面是一个示例类:
class home_page(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.configure(background="white")
h_title = tk.Label(self, text="Welcome to Fantasy Football!", fg="white", height=2, width=60, anchor="center", bg="#0ebf08", font=controller.title_font)
h_squad_hub_lb = tk.Label(self, text="Squad Hub", fg="white", width=13, anchor="center", bg="#38003c", font=controller.title_font)
squad_hub_text = "Selection headaches keeping you up\nat night? View your team below: "
h_sh_text = tk.Label(self, text=squad_hub_text, bg="white", font=("Segoe UI", 13))
h_view_team_bt = tk.Button(self, text="View Team", bg="#38003c", fg="white", command=lambda: controller.show_frame("pitch_view_team_page"))
h_transfers_bt = tk.Button(self, text="Transfers", bg="#38003c", fg="white", command=lambda: controller.show_frame("pitch_view_transfers_page"))
self.sh_img = PhotoImage(file = "Miscellaneous images/Squad Hub.png")
h_sh_img = tk.Label(self, image=self.sh_img)
h_rules_lb = tk.Label(self, text="Rules", fg="white", bg="#38003c", width=13, anchor="center", font=controller.title_font)
rules_text = "Need to know the game before you can\ncrush it? Check out our rules below: "
h_r_text = tk.Label(self, text=rules_text, bg="white", font=("Segoe UI", 13))
h_selection_info_bt = tk.Button(self, text="Selection Info", bg="#38003c", fg="white", command=lambda: controller.show_frame("seli_rules_page"))
h_scoring_info_bt = tk.Button(self, text="Scoring Info", bg="#38003c", fg="white", command=lambda: controller.show_frame("scoi_rules_page"))
self.r_img = PhotoImage(file = "Miscellaneous images/Rules.png")
h_r_img = tk.Label(self, image=self.r_img)
h_stats_lb = tk.Label(self, text="Statistics", fg="white", bg="#38003c", width=13, anchor="center", font=controller.title_font)
stats_text= "Want some hard facts to help decide on\nyour transfers? Check out the stats below: "
h_s_text = tk.Label(self, text=stats_text, bg="white", font=("Segoe UI", 13))
h_table_bt = tk.Button(self, text="League Table", bg="#38003c", fg="white", command=lambda: controller.show_frame("lgetbl_stats_page"))
h_plrsts_bt = tk.Button(self, text="Player Stats", bg="#38003c", fg="white", command=lambda: controller.show_frame("plrsts_stats_page"))
self.s_img = PhotoImage(file = "Miscellaneous images/Stats.png")
h_s_img = tk.Label(self, image=self.s_img)
h_news_lb = tk.Label(self, text="News", fg="white", width=13, anchor="center", bg="#38003c", font=controller.title_font)
news_text = "Want to hear what your favourite team is\nup to? Check out club news below: "
h_n_text = tk.Label(self, text=news_text, bg="white", font=("Segoe UI", 13))
h_club_list_bt = tk.Button(self, text="Club List", bg="#38003c", fg="white", command=lambda: controller.show_frame("clli_stats_page"))
h_preferences_bt = tk.Button(self, text="My Preferences", bg="#38003c", fg="white", command=lambda: controller.show_frame("mpref_settings_page"))
self.n_img = PhotoImage(file = "Miscellaneous images/News.png")
h_n_img = tk.Label(self, image=self.n_img)
h_title.grid(row=0, column=0, columnspan=15, pady=(60,60))
h_squad_hub_lb.grid(row=1, column=0, columnspan=3)
h_sh_text.grid(row=2, column=0, columnspan=3, rowspan=3)
h_sh_img.grid(row=2, column=3, rowspan=2)
h_view_team_bt.grid(row=4, column=0, pady=(20,40))
h_transfers_bt.grid(row=4, column=1, pady=(20,40))
h_rules_lb.grid(row=1, column=11, columnspan=3)
h_r_text.grid(row=2, column=11, columnspan=3, rowspan=2)
h_r_img.grid(row=2, column=14, rowspan=2)
h_selection_info_bt.grid(row=4, column=11, pady=(20,40))
h_scoring_info_bt.grid(row=4, column=12, pady=(20,40))
h_stats_lb.grid(row=5, column=0, columnspan=3)
h_s_text.grid(row=6, column=0, columnspan=3, rowspan=2)
h_s_img.grid(row=6, column=3, rowspan=2)
h_table_bt.grid(row=8, column=0, pady=(20,40))
h_plrsts_bt.grid(row=8, column=1, pady=(20,40))
h_news_lb.grid(row=5, column=11, columnspan=3)
h_n_text.grid(row=6, column=11, columnspan=3, rowspan=2)
h_n_img.grid(row=6, column=14, rowspan=2)
h_club_list_bt.grid(row=8, column=11, pady=(20,40))
h_preferences_bt.grid(row=8, column=12, pady=(20,40))
【问题讨论】:
-
你看过
.winfo_screenwidth()和.winfo_screenheight()吗?也使用pack或grid而不是place -
@Matiiss 道歉,我现在已经编辑声明我正在使用网格几何,我相信我可以使用打包进行缩放,但网格对于这个项目来说更实用。我会检查 .winfo 命令,谢谢
-
除了
.winfo_screenwidth()和.winfo_screenheight()之外,还有winfo_fpixels()和winfo_fpixels()可以将英寸和厘米等物理单位转换为像素。返回值在使用place布局管理器以及指定小部件的大小(宽度或高度)时很有用,例如width=10c为 10 厘米。 -
请提供您目前所做的代码示例,以便我们为您提供适当的帮助。
-
由于多种原因,我们无法运行您发布的代码。请尝试提供一个不使用图像的示例,或者使用不依赖外部文件的空白图像(例如:
PhotoImage(width=32, height=32))。您的问题文本说您对大多数小部件使用宽度和高度,但这里只有一个小部件具有高度。另外,请描述您需要使 UI 变得多小。当我删除图像时,此代码小于 700x500。
标签: python tkinter tkinter-layout