python使用tkinter可以在多个操作系统_Python Tkinter面向对象 - 以多个框架为中心

所以我在Python中编写面向对象的程序,并使用Tkinter构建GUI . 我是面向对象和Tkinter的新手,所以我一直在youtube,effbot.org,stackoverflow和zetcode.com上使用Sentdex视频来帮助我 .

这是我的程序,我已经删除了很多,所以它更短,更容易理解 . 它以全屏模式启动并使框架居中 . 然后我单击登录按钮,然后引发下一帧,但是这一帧不会居中,尽管它位于由权重= 1的单元格包围的网格中间 .

import tkinter as tk

from tkinter import ttk

class Program(tk.Tk):

def __init__(self, *args, **kwargs):

tk.Tk.__init__(self, *args, **kwargs)

container = tk.Frame(self)

container.pack(side="top", fill="both", expand=True)

container.grid_rowconfigure(0, weight=1)

container.grid_columnconfigure(0, weight=1)

container.grid_rowconfigure(2, weight=1)

container.grid_columnconfigure(2, weight=1)

self.frames = {}

frame = Login(container, self)

self.frames[Login] = frame

frame.grid(row=1, column=1, sticky="nsew")

for F in (Login, AdminHome):

frame = F(container, self)

self.frames[F] = frame

frame.grid(row = 1, column = 1, sticky = "nsew")

self.show_frame(Login)

def show_frame(self,cont):

frame = self.frames[cont]

frame.tkraise()

class Login(tk.Frame):

def __init__(self, parent, controller):

tk.Frame.__init__(self, parent)

name = tk.Label(self, text = "Program")

name.grid(row=0, columnspan=5, sticky="W"+"E")

username = tk.Label(self, text="Username: ")

username.grid(row=1, columnspan=2, sticky="W")

user = ttk.Entry(self, text ="", width=45)

user.grid(row=1, column=2 ,columnspan=3, sticky="w")

password = tk.Label(self, text="Password: ")

password.grid(row=2, columnspan=2, sticky="W")

passentry = ttk.Entry(self, text ="", width=45)

passentry.grid(row=2, column=2 ,columnspan=3, sticky="W")

loginb = ttk.Button(self, text = "Login", command = lambda: controller.show_frame(AdminHome))

loginb.grid(row=3, columnspan=5, sticky="W"+"E")

class AdminHome(tk.Frame):

def __init__(self, parent, controller):

tk.Frame.__init__(self, parent)

name = tk.Label(self, text = "Admin Home")

name.grid(row=0, sticky="W")

name = tk.Label(self, text = "FirstName + LastName")

name.grid(row=0, column=5 ,sticky="E")

update = ttk.Button(self, text = "Update Online", command = lambda: controller.show_frame(AdminHome))

update.grid(row=1, columnspan=6, sticky="W"+"E")

fetch = ttk.Button(self, text = "Fetch Data", command = lambda: controller.show_frame(AdminHome))

fetch.grid(row=2, columnspan=6, sticky="W"+"E")

a = ttk.Button(self, text = "a", command = lambda: controller.show_frame(AdminHome))

a.grid(row=3, columnspan=2, sticky="W"+"E")

b = ttk.Button(self, text = "b", command = lambda: controller.show_frame(AdminHome))

b.grid(row=3, column=2, columnspan=2, sticky="W"+"E")

c = ttk.Button(self, text = "c", command = lambda: controller.show_frame(AdminHome))

c.grid(row=3, column=4, columnspan=2, sticky="W"+"E")

edit = ttk.Button(self, text = "Edit Details", command = lambda: controller.show_frame(AdminHome))

edit.grid(row=4, columnspan=6, sticky="W"+"E")

app = Program()

app.state('zoomed')

app.mainloop()

当我将以下代码添加到AdminHome类时,问题相反,登录屏幕停止居中但管理员主屏幕变为居中 .

uip = tk.Label(self, text="Updating in Progress ")

uip.grid(row=5, sticky="W")

updatebar = ttk.Progressbar(self,orient ="horizontal",length = 200, mode ="determinate")

updatebar.grid(row=5, column=1, sticky="W"+"E")

updatebar["maximum"] = 100

updatebar["value"] = 50

fip = tk.Label(self, text="Fetching in Progress ")

fip.grid(row=5, column=2, sticky="W")

fetchbar = ttk.Progressbar(self,orient ="horizontal",length = 200, mode ="determinate")

fetchbar.grid(row=5, column=3, sticky="W"+"E")

fetchbar["maximum"] = 100

fetchbar["value"] = 50

有人能告诉我为什么会这样,以及我如何解决它 . 如果我改变这些框架中小部件的大小以及我添加到程序中的所有其他框架,我还需要解决方案 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值