大佬教程收集整理的这篇文章主要介绍了在其他屏幕中移动或通过 ssh 运行时,Tkinter 应用程序不保持比例,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 Tkinter
构建了一个 GUI。在我的双显示器本地机器上,gui 的外观和它设计的一样。
我有以下问题:
如果我将窗口移动到第二个显示器,那么主窗口内的框架不会根据新显示器的尺寸调整大小,因此 gui 看起来像
我猜与以下事实有关,即我使用的是应用程序对columnconfigure
我的框架开放的显示器的大小。
screen_wIDth = int(window.winfo_geometry().split('x',1)[0])
tab_Digitizer.columnconfigure(0,minsize=int(0.75*screen_wIDth),weight=80)
第二个问题是,如果我使用 @H_651_3@macOS 从远程机器(XQuartz
和 ssh
)连接,默认情况下会打开一个小窗口,我的 gui 看起来像所以
因为我刚开始使用 Python 和 Tkinter,所以我可能做错了什么,但不知道是什么。
有没有办法根据根窗口的尺寸自动调整大小/重新缩放/缩小所有内容?
也可以对每个父级的子级(即框架内的小部件)执行相同的操作
我的代码太大了,贴在这里,所以我给了一个链接 https://pastebin.com/hHEYJ1bR 但我有一个可能有帮助的片段
@H_403_42@import tkinter as tk
import tkinter.Font
from tkinter import *
from tkinter import ttk
from tkinter import messageBox
from PIL import ImageTk,Image
import screeninfo
from screeninfo import get_monitors
import os
# Method to make Label(Widget) invisible
def hIDe_frame(framE):
# This will remove the Widget
frame.grID_remove()
# Method to make Label(Widget) visible
def show_frame(frame,c,r,S,pdX):
# This will recover the Widget
frame.grID(column=c,row=r,sticky=S,ipadx=(pdx,0))
# Method to make Label(Widget) visible
def show_frame_padx(frame,padx=(pdx,0))
def populate(frame,rows):
'''Put in some fake data'''
for row in range(rows):
tk.Label(frame,text = "%s" % row,).grID(row=row,column=0)
t="Blah blah blah blah blah blah blah blah %s" %row
tk.Label(frame,text=t).grID(row = row,column = 1,sticky = EW
)
#____________________________________________________________________________________________
#This will be the main window
window = tk.Tk()
window.resizable(True,TruE)
window.attributes('-zoomed',TruE)
window.title("DicER daq")
default_Font = tkinter.Font.Font(Font='TkDefaultFont')
screen_height = window.winfo_screenheight()
window.update()
screen_wIDth = int(window.winfo_geometry().split('x',1)[0])
screen_height = int(window.winfo_geometry().split('x',1)[1].split('+',1)[0])
#____________________________________________________________________________________________
#Upper frame
frame_logo = Frame(window,bd=10)
frame_logo.place(rely=0.0,relx=0.0,relwIDth=1.0)
logo_label = tk.Label(frame_logo,text="daq",fg="red",Font='Helvetica 18 bold')
logo_label.pack(anchor=W)
label_version = tk.Label(frame_logo,text="version test.0",fg="blue")
label_version.pack(sIDe=left)
#____________________________________________________________________________________________
#Lower frame
frame_main = Frame(window)
frame_main.place(rely=0.10,relwIDth=1.0)
#Create a tabcontrol
tabControl = ttk.Notebook(frame_main)
tabControl.grID(column=0,row=1)
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Digitizer tab
tab_Digitizer = ttk.Frame(tabControl)
tabControl.add(tab_Digitizer,text=' Digitizer ')
tab_Digitizer.columnconfigure(0,weight=80)
tab_Digitizer.columnconfigure(1,minsize=75,weight=10)
tab_Digitizer.columnconfigure(2,weight=10)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#This is to SELEct available digitizer chAnnels
def Digitizer_chAnnel_SELEction(event):
print ("Digitizer chAnnel SELEcted:",var_digitizer_chAnnel.get() )
pass
lbl_general_board_setTings = Label(tab_Digitizer,text="Digitizer chAnnel number",Font='-weight bold')
lbl_general_board_setTings.grID(column=0,row=0,sticky=W)
opt_digitizer_chAnnel = [0,1,2,3,4,5,6,7,8,9,10,11]
var_digitizer_chAnnel = Intvar(tab_Digitizer)
var_digitizer_chAnnel.set(opt_digitizer_chAnnel[0]) # default value
digitizer_chAnnel = OptionMenu(tab_Digitizer,var_digitizer_chAnnel,*opt_digitizer_chAnnel,command = Digitizer_chAnnel_SELEction)
digitizer_chAnnel.grID(column=1,sticky=NSEW)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#General board setTings
lbl_general_board_registers = Label(tab_Digitizer,text = "General board registers",Font = '-weight bold',)
lbl_general_board_registers.grID(column = 0,row = 1,sticky = W
)
btn_hIDe_general_board_registers = button(tab_Digitizer,text = "HIDe",Font = '-weight bold',command = lambda: hIDe_frame(frame_general_board_registers)
)
btn_hIDe_general_board_registers.grID(column = 1,sticky = EW
)
btn_show_general_board_registers = button(tab_Digitizer,text = "Show",command = lambda: show_frame_padx(frame_general_board_registers,EW,0)
)
btn_show_general_board_registers.grID(column = 2,sticky = EW
)
frame_general_board_registers = Frame(tab_Digitizer
)
frame_general_board_registers.columnconfigure(0,minsize=int(0.49*0.75*screen_wIDth),weight=50)
frame_general_board_registers.columnconfigure(1,minsize=int(0.25*0.75*screen_wIDth),weight=25)
frame_general_board_registers.columnconfigure(2,weight=25)
frame_general_board_registers.config(highlightBACkground="black",highlightthickness=3)
frame_general_board_registers.grID(column = 0,row = 2,sticky = EW,ipadx = 0
)
populate(frame_general_board_registers,35)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#ChAnnel setTings
lbl_chAnnel_registers = Label(tab_Digitizer,text = "ChAnnel registers",Font = '-weight bold'
)
lbl_chAnnel_registers.grID(column = 0,row = 3,sticky = W
)
btn_hIDe_chAnnel_registers = button(tab_Digitizer,text="HIDe",Font="-weight bold",command=lambda: hIDe_frame(frame_chAnnel_registers)
)
btn_hIDe_chAnnel_registers.grID(column = 1,row = 3,sticky = EW
)
btn_show_chAnnel_registers = button(tab_Digitizer,command = lambda: show_frame_padx(frame_chAnnel_registers,W,0)
)
btn_show_chAnnel_registers.grID(column = 2,sticky = EW
)
frame_chAnnel_registers = Frame(tab_Digitizer
)
frame_chAnnel_registers.grID(column = 0,row = 4,sticky = W
)
frame_chAnnel_registers.columnconfigure(0,minsize=int(0.840*0.75*screen_wIDth),weight=84)
frame_chAnnel_registers.columnconfigure(1,minsize=int(0.075*0.75*screen_wIDth),weight=8)
frame_chAnnel_registers.columnconfigure(2,weight=8)
frame_chAnnel_registers.config(highlightBACkground="black",highlightthickness=3)
##ChAnnel setTings - PSD
def onFrameConfigure(event):
'''reset the scroll region to encompass the inner frame'''
canvas.configure(scrollregion=canvas.bBox("all"))
def handle_user_scrolling_up(event):
canvas.yvIEw_scroll(-5,"units")
def handle_user_scrolling_down(event):
canvas.yvIEw_scroll(5,"units")
def handle_scrollbar_scrolling(event):
canvas.configure(scrollregion=canvas.bBox("all"))
lbl_PSD_chAnnel_registers = Label(frame_chAnnel_registers,text = "DPP-PSD registers",Font = (default_Font.actual(),"10","bold")
)
lbl_PSD_chAnnel_registers.grID(column = 0,ipadx = 20,sticky = W)
btn_hIDe_PSD_chAnnel_registers = button(frame_chAnnel_registers,Font = (default_Font.actual(),"bold"),command = lambda: [hIDe_frame(canvas),hIDe_frame(myscrollbar)]
)
btn_hIDe_PSD_chAnnel_registers.grID(column = 1,sticky = EW
)
btn_show_PSD_chAnnel_registers = button(frame_chAnnel_registers,command = lambda: [show_frame_padx(canvas,50),show_frame_padx(myscrollbar,NS,0)])
btn_show_PSD_chAnnel_registers.grID(column = 2,sticky = EW
)
canvas = tk.Canvas(frame_chAnnel_registers,height = int(0.20*screen_height)
)
frame_PSD_chAnnel_registers = Frame(canvas
)
frame_PSD_chAnnel_registers.grID(column = 0,row = 0,sticky = EW
)
frame_PSD_chAnnel_registers.bind("<button-4>",handle_user_scrolling_up)
frame_PSD_chAnnel_registers.bind("<button-5>",handle_user_scrolling_down)
frame_PSD_chAnnel_registers.bind("<Configure>",handle_scrollbar_scrolling)
myscrollbar=Scrollbar(frame_chAnnel_registers,orIEnt="vertical",command=canvas.yvIEw)
canvas.configure(scrollregion=canvas.bBox("all"))
myscrollbar.grID(column = 1,sticky = NS,ipadx = 0)
canvas.grID(column = 0,sticky = EW,padx = (50,0))
canvas.create_window((0,0),window=frame_PSD_chAnnel_registers,anchor="nw")
canvas.configure(yscrollcommand=myscrollbar.set)
canvas.columnconfigure(0,minsize=int(0.90*0.84*0.75*screen_wIDth),weight=99)
canvas.columnconfigure(1,minsize=int(0.10*0.84*0.75*screen_wIDth),weight=1)
frame_PSD_chAnnel_registers.columnconfigure(0,minsize=int(0.20*0.84*0.75*screen_wIDth),weight=20)
frame_PSD_chAnnel_registers.columnconfigure(1,weight=10)
frame_PSD_chAnnel_registers.columnconfigure(2,minsize=int(0.60*0.84*0.75*screen_wIDth),weight=50)
frame_PSD_chAnnel_registers.config(highlightBACkground="black",highlightthickness=1)
populate(frame_PSD_chAnnel_registers,35)
#This keeps the window open - has to be at the end
window.mainloop()
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的在其他屏幕中移动或通过 ssh 运行时,Tkinter 应用程序不保持比例全部内容,希望文章能够帮你解决在其他屏幕中移动或通过 ssh 运行时,Tkinter 应用程序不保持比例所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。