程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在其他屏幕中移动或通过 ssh 运行时,Tkinter 应用程序不保持比例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在其他屏幕中移动或通过 ssh 运行时,Tkinter 应用程序不保持比例?

开发过程中遇到在其他屏幕中移动或通过 ssh 运行时,Tkinter 应用程序不保持比例的问题如何解决?下面主要结合日常开发的经验,给出你关于在其他屏幕中移动或通过 ssh 运行时,Tkinter 应用程序不保持比例的解决方法建议,希望对你解决在其他屏幕中移动或通过 ssh 运行时,Tkinter 应用程序不保持比例有所启发或帮助;

我使用 Tkinter 构建了一个 GUI。在我的双显示器本地机器上,gui 的外观和它设计的一样。

在其他屏幕中移动或通过 ssh 运行时,Tkinter 应用程序不保持比例

我有以下问题:

  1. 如果我将窗口移动到第二个显示器,那么主窗口内的框架不会根据新显示器的尺寸调整大小,因此 gui 看起来像

    在其他屏幕中移动或通过 ssh 运行时,Tkinter 应用程序不保持比例

    我猜与以下事实有关,即我使用的是应用程序对columnconfigure 我的框架开放的显示器的大小。

    screen_wIDth = int(window.winfo_geometry().split('x',1)[0])

    tab_Digitizer.columnconfigure(0,minsize=int(0.75*screen_wIDth),weight=80)

  2. 第二个问题是,如果我使用 @H_651_3@macOS 从远程机器(XQuartzssh)连接,默认情况下会打开一个小窗口,我的 gui 看起来像所以

    在其他屏幕中移动或通过 ssh 运行时,Tkinter 应用程序不保持比例

    奇怪的是,如果我最大化窗口,布局就会完全混乱

    在其他屏幕中移动或通过 ssh 运行时,Tkinter 应用程序不保持比例

因为我刚开始使用 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,请注明来意。