需要向FGC LabelFrame(Tkinter)添加滚动工具栏

使用内部应用程序并尝试仅使滚动条指向“ FGC” labelFrame,此外,我需要将框架缩放到应用程序大小。

如果有人可以协助我进行重构并创建滚动条,我会很高兴。

我知道我需要创建一个画布之类的东西,但是不知道如何。

这对我来说是Tkinter的第一次。

from tkinter import *
import os,subprocess
from tkinter import ttk

managment = ["MAIN","NAV","OUTPUT","OUTPUTSPARE","GATEWAY","Sync1","Sync2"]
servers = ["recon01","recon02","recon03","recon04","recon05","recon06","recon07","recon08","recon09","recon10","recon11","recon12","render01","render02","storinator"]
FGCs =["fgc01","fgc02","fgc03","fgc04","fgc05","fgc06","fgc07","fgc08","fgc09","fgc10","fgc11","fgc12","fgc13","fgc14","fgc15","fgc16","fgc17","fgc18","fgc19","fgc20","fgc21","fgc22","fgc23","fgc24","fgc25","fgc26","fgc27","fgc28","fgc29","fgc30","fgc31","fgc32","fgc33","fgc34","fgc35","fgc36","fgc37","fgc38","fgcspare1","fgcspare2","fgcspare3","fgcspare4"]
tests = ["Network","GPU","Time","Gidel","snapshot","Disks"]
testbuttons = []
serverbuttons = []
managebuttons = []
fgcbuttons = []


class mainwindow:
    global test    
    global testbuttons
    global managment
    global managebuttons
    global FGCs

    def __init__(self,master):
        self.master = master
        master.title("System Report Tool")
        master.geometry("1000x500")

        self.Tests = ttk.LabelFrame(root,text="Tests")
        self.Tests.pack(expand="no",anchor=W,pady=20)

        for test in tests:
            testcheck = ttk.Checkbutton(self.Tests,text=test)
            testcheck.pack(side=LEFT,anchor="n")
            testbuttons.append(testcheck)

        def select_tests():
            for test in testbuttons:
                test.invoke()

        selecttests = ttk.Checkbutton(root,text="Select All",command=select_tests)
        selecttests.place(x=260,y=16)

        self.Managment = ttk.LabelFrame(root,text="Managment")
        self.Managment.configure(width=10,height=20)
        self.Managment.pack(expand="no",anchor=W)

        for manage in managment:
            managecheck = ttk.Checkbutton(self.Managment,text=manage)
            managecheck.pack(side=TOP,anchor="w")
            managebuttons.append(managecheck)

        def select_manage():
            for manage in managebuttons:
                manage.invoke()

        selectmanage = ttk.Checkbutton(self.Managment,command=select_manage)
        selectmanage.pack()

        self.FGCs = ttk.LabelFrame(root,text="FGCs")
        self.FGCs.configure(width=10,height=20)
        self.FGCs.place(x=120,y=80)

        for fgc in FGCs:
            fgccheck = ttk.Checkbutton(self.FGCs,text=fgc)
            fgccheck.pack(side=TOP,anchor="w")
            fgcbuttons.append(fgccheck)

        def select_fgc():
            for fgc in fgcbuttons:
                fgc.invoke()

        selectfgc = ttk.Checkbutton(self.FGCs,command=select_fgc)
        selectfgc.pack()

root = Tk()
Window = mainwindow(root)
root.mainloop()

谢谢。

wanglili19860813 回答:需要向FGC LabelFrame(Tkinter)添加滚动工具栏

使用scrolled-frame-canvas中的class ScrolledFrame复制代码

ScrolledFrame LabelFrame内创建self.FGCs

self.sf = ScrolledFrame(self.FGCs)
self.sf.pack()

然后将小部件放置在inner的{​​{1}}元素中,而不是像这样将它们放置在ScrolledFrame

self.FGCs

工作代码

fgccheck = ttk.Checkbutton(self.sf.inner,text=fgc)

编辑:该代码使用import os import subprocess import tkinter as tk from tkinter import * from tkinter import ttk class ScrolledFrame(tk.Frame): def __init__(self,parent,vertical=True,horizontal=False): super().__init__(parent) # canvas for inner frame self._canvas = tk.Canvas(self) self._canvas.grid(row=0,column=0,sticky='news') # changed # create right scrollbar and connect to canvas Y self._vertical_bar = tk.Scrollbar(self,orient='vertical',command=self._canvas.yview) if vertical: self._vertical_bar.grid(row=0,column=1,sticky='ns') self._canvas.configure(yscrollcommand=self._vertical_bar.set) # create bottom scrollbar and connect to canvas X self._horizontal_bar = tk.Scrollbar(self,orient='horizontal',command=self._canvas.xview) if horizontal: self._horizontal_bar.grid(row=1,sticky='we') self._canvas.configure(xscrollcommand=self._horizontal_bar.set) # inner frame for widgets self.inner = tk.Frame(self._canvas) self._window = self._canvas.create_window((0,0),window=self.inner,anchor='nw') # autoresize inner frame self.columnconfigure(0,weight=1) # changed self.rowconfigure(0,weight=1) # changed # resize when configure changed self.inner.bind('<Configure>',self.resize) # resize inner frame to canvas size self.resize_width = False self.resize_height = False self._canvas.bind('<Configure>',self.inner_resize) def resize(self,event=None): self._canvas.configure(scrollregion=self._canvas.bbox('all')) def inner_resize(self,event): # resize inner frame to canvas size if self.resize_width: self._canvas.itemconfig(self._window,width=event.width) if self.resize_height: self._canvas.itemconfig(self._window,height=event.height) managment = ["MAIN","NAV","OUTPUT","OUTPUTSPARE","GATEWAY","Sync1","Sync2"] servers = ["recon01","recon02","recon03","recon04","recon05","recon06","recon07","recon08","recon09","recon10","recon11","recon12","render01","render02","storinator"] FGCs =["fgc01","fgc02","fgc03","fgc04","fgc05","fgc06","fgc07","fgc08","fgc09","fgc10","fgc11","fgc12","fgc13","fgc14","fgc15","fgc16","fgc17","fgc18","fgc19","fgc20","fgc21","fgc22","fgc23","fgc24","fgc25","fgc26","fgc27","fgc28","fgc29","fgc30","fgc31","fgc32","fgc33","fgc34","fgc35","fgc36","fgc37","fgc38","fgcspare1","fgcspare2","fgcspare3","fgcspare4"] tests = ["Network","GPU","Time","Gidel","Snapshot","Disks"] testbuttons = [] serverbuttons = [] managebuttons = [] fgcbuttons = [] class mainwindow: global test global testbuttons global managment global managebuttons global FGCs def __init__(self,master): self.master = master master.title("System Report Tool") master.geometry("1000x500") self.Tests = ttk.LabelFrame(root,text="Tests") self.Tests.pack(expand="no",anchor=W,pady=20) for test in tests: testcheck = ttk.Checkbutton(self.Tests,text=test) testcheck.pack(side=LEFT,anchor="n") testbuttons.append(testcheck) def select_tests(): for test in testbuttons: test.invoke() selecttests = ttk.Checkbutton(root,text="Select All",command=select_tests) selecttests.place(x=260,y=16) self.Managment = ttk.LabelFrame(root,text="Managment") self.Managment.configure(width=10,height=20) self.Managment.pack(expand="no",anchor=W) for manage in managment: managecheck = ttk.Checkbutton(self.Managment,text=manage) managecheck.pack(side=TOP,anchor="w") managebuttons.append(managecheck) def select_manage(): for manage in managebuttons: manage.invoke() selectmanage = ttk.Checkbutton(self.Managment,command=select_manage) selectmanage.pack() self.FGCs = ttk.LabelFrame(root,text="FGCs") self.FGCs.configure(width=10,height=20) self.FGCs.place(x=120,y=80) self.sf = ScrolledFrame(self.FGCs) self.sf.pack() for fgc in FGCs: fgccheck = ttk.Checkbutton(self.sf.inner,text=fgc) fgccheck.pack(side=TOP,anchor="w") fgcbuttons.append(fgccheck) def select_fgc(): for fgc in fgcbuttons: fgc.invoke() selectfgc = ttk.Checkbutton(self.sf.inner,command=select_fgc) selectfgc.pack() root = Tk() Window = mainwindow(root) root.mainloop() 和一些选项,可在调整窗口大小时调整窗口小部件的大小

pack()
本文链接:https://www.f2er.com/3161022.html

大家都在问