我用python和tkinter创建了一个简单的应用程序接口。你知道吗
[您可以运行代码]
里面有两个框架[自我约束]框架。 第一帧是标题[自动头架]第二帧[self.c框架]是滚动画布中动态填充的列表[自我满足]. 因为滚动画布中的项目数[自我满足]将改变,我需要调整画布每次列表填充或窗口大小。你知道吗
from tkinter import *
import tkinter.font as font
from PIL import Image, ImageTk
class wmGUI (object):
def __init__ (self,tittle,itemnum):
self.tittle=tittle
self.GUI = wmWINDOW(self.tittle,itemnum)
class wmWINDOW(Tk):
windowwidth,windowheight,sliderresizer = 250,600,100
def __init__ (self,tittle,itemnum):
super().__init__()
WW = self.winfo_screenwidth()
WH = self.winfo_screenheight()
print('WW : %d & WH : %d' % (WW,WH))
geometry = '{width}x{height}+{pos_x}+{pos_y}'.format(height=WH, width=self.windowwidth, pos_y=0, pos_x=WW-self.windowwidth-20)
self.geometry(geometry)
self.configure(background='grey')
self.title("GUI")
self.itemnum=itemnum
self.resizable(width=False, height=True)
self.attributes('-topmost',True)
self.CreateMenus()
self.Myfont= font.Font(family="Arial", size=8, weight=font.NORMAL)
self.Myfont2 = font.Font(family="Helvetica", size=9, weight=font.BOLD)
self.Myfont3 = font.Font(family="Helvetica", size=7, weight=font.BOLD)
self.CON=Frame(self,width=self.windowwidth,height=WH)
self.MakeHeader()
self.MakeContent()
self.CON.pack(fill=BOTH, expand=YES)
self.RUN()
def MakeHeader (self):
self.HeaderFrame= Frame(self.CON, width=self.windowwidth,height=60, background='Blue',borderwidth=0 )
self.HeaderFrame.propagate(1)
hImage = Image.open("images/header.jpg")
headerImage=ImageTk.PhotoImage(hImage, width= self.windowwidth, height=60)
self.headerLabel=Label(self.HeaderFrame,image=headerImage, width= self.windowwidth, height=60, borderwidth=0, highlightthickness=0)
self.headerLabel.image=headerImage
self.headerLabel.pack( )
self.HeaderFrame.pack( padx=0,pady=0,ipadx=0,ipady=0)
def MakeContent (self):
self.CFrame = Frame(self.CON, width=self.windowwidth,bg="cyan")
self.Content = Canvas(self.CFrame, width=self.windowwidth-15, bg="green",borderwidth=0, highlightthickness=0)
self.ContentFrame = Frame(self.Content, bg="#EBEBEB",height=100)
self.Content.create_window(0, 0, window=self.ContentFrame, anchor='nw')
self.ContentFrame.bind("<Configure>", self.on_change)
self.Items()
self.CScrollbar = Scrollbar(self.CFrame, orient=VERTICAL , width=15)
self.CScrollbar.config(command=self.Content.yview)
self.Content.config(yscrollcommand=self.CScrollbar.set)
self.CScrollbar.grid(row=0, column=1, sticky="ns")
self.Content.grid(row=0, column=0, sticky="nsew")
self.CFrame.pack(fill=BOTH, expand=YES)
self.Content.configure(height=self.CON.winfo_reqheight() - 60)
def on_change(self,event):
self.Content.configure(scrollregion=self.Content.bbox("all"))
def Items(self):
for n in range(self.itemnum):
LabelFrame(self.ContentFrame, text='Example Item {}'.format(n) , font=self.Myfont3, bg="yellow", fg="black",width=self.windowwidth,height=40).grid()
def RUN (self):
self.mainloop()
def CreateMenus(self):
#MAIN MENUBAR
MenuBar = Menu(self) #Creates Menu bar
self.config(menu=MenuBar)
# FILE MENU
FileMenu=Menu(MenuBar,tearoff=0)
FileMenu.add_command(label="Open",command=None) #command=bewritten
FileMenu.add_command(label="Close",command=None)
FileMenu.add_separator()
FileMenu.add_command(label="Reset", accelerator="Ctrl + Shift + r")
FileMenu.add_separator()
FileMenu.add_command(label="Quit", command= None,accelerator="Ctrl q")
MenuBar.add_cascade(label="File",menu=FileMenu)
WMGUI=wmGUI('My Window',50)
我想调整画布的大小[自我满足]我应该检索窗的内部高度。但是我找不到方法。 我该怎么做?你知道吗
我找到了解决办法。这里的例子真的很有帮助。。 LINK
窗口中帧的格式如下
[Frame CON]-[Frame Header]-[Frame Content]-[Content Canvas]>;[/Frame CON]
我把函数改为自我约束;容器框架,因为每次更改CON内容时,容器框架都会更改。你知道吗
我将“更改”功能更改为:
所以在一个事件中,onchange事件获取CON容器框架的高度,并在每次CON更改时将height-60应用于画布。你知道吗
这真的工作为滚动条调整大小时,内容创建。。。你知道吗
还向根窗口添加了事件处理程序。这将在窗口大小更改时调整滚动条的大小。你知道吗
好像一切都好了。。。你知道吗
相关问题 更多 >
编程相关推荐