使用tkinter Python设计除网格以外的任何其他方式?

时间:2015-06-03 03:58:26

标签: python python-3.x tkinter

请耐心等待我,我今年16岁,仅在去年九月开始编程,在codeacademy上。无论如何,我创建了这个程序,所以我最初可以获得数学学期的最终成绩,但现在我被告知学校可能想要使用它。现在我必须使GUI非常漂亮,并且这样做我遇到了一个问题,网格不能与#34; .pack()"同一窗口中的小部件,例如我的" root"所以我的问题是:

如何使用网格移动物体并将它们放置在我想要的位置,而没有限制范围" LEFT,RIGHT,BOTTOM,TOP"

以下是代码:

from tkinter import *
import tkinter.messagebox
import os
from tkinter import font

from tkinter import ttk

root = Tk()
root.geometry("800x500")
root.configure(background="grey")
root.title("Mathematical Assistance Program")

#********Functions**********#
def About():
    Beep = tkinter.messagebox.askquestion("About", "M.A.P was created by Mykel Mills using his amazing programming skills for math  is he awesome or what?")
    if Beep == "yes":
        tkinter.messagebox.showinfo("Thanks", "Thank you very much!")
    else:
        os.startfile("killthem.flv")
def Author():
    AuthorWindow = Toplevel()
    AuthorWindow.geometry("500x200")
    AuthorWindow.title("The Developer")
    photo = PhotoImage(file="pain.gif")
    Label1 = Label(AuthorWindow, image=photo)
    Label1.image = photo
    Label1.grid(row=0, column=0)
def AddingMatrices():
    os.startfile("MAdd.mp4")
    tkinter.messagebox.showinfo("Here", "I've opened a PDF for you for questions.")
    os.startfile("1.pdf")
def MultiplyMatrices():
    os.startfile("MM1.mp4")
    tkinter.messagebox.showinfo("Part 2", "Let's begin part 2!")
    os.startfile("MM2.mp4")
    tkinter.messagebox.showinfo("Worksheet", "I'll open a worksheet for you!")
    os.startfile("MM.pdf")



#*******Menu and Sub Menu**********#
menu = Menu(root)
root.config(menu=menu)
subMenu = Menu(menu)
CSsubMenu = Menu(menu)
MatrixSubMenu = Menu(menu)
menu.add_cascade(label="Home", menu=subMenu)
menu.add_cascade(label="Choose Topic", menu=CSsubMenu)
subMenu.add_command(label="About", command=About)
subMenu.add_command(label="Developer", command=Author)
subMenu.add_separator()
subMenu.add_command(label="Help", command=root.quit)
subMenu.add_command(label="Quit", command=root.quit)
MatrixSubMenu.add_command(label="Adding and Subtracting Matrices", command=AddingMatrices)
MatrixSubMenu.add_command(label="Multiplying Matrices", command=MultiplyMatrices)
CSsubMenu.add_cascade(label="Matrices", menu=MatrixSubMenu)
CSsubMenu.add_command(label="Vectors", command=root.quit)
CSsubMenu.add_command(label="Circle Theorom", command=root.quit)
CSsubMenu.add_command(label="Algebra", command=root.quit)

#*********Status Bar**********#
status = Label(root, text="Welcome to M.A.P, I will be your host today, My name is Bob, Please request for my help by clicking the help button", bd=1, relief=SUNKEN, anchor=W)
status.pack(side=BOTTOM, fill=X)

#**********To do list******************
lf = LabelFrame(root, text="To Do", padx=5, pady=5, bg="grey")
lf.pack(side=LEFT)
label = Label(lf, text="1. Add Vector videos and questions", bg="grey")
label1 = Label(lf, text="2. Complete all other possible topics", bg="grey")
label2 = Label(lf, text="3. Create UI to be more User Friendly", bg="grey")
label3 = Label(lf, text="4. Create point system with rewards", bg="grey")
label4 = Label(lf, text="5. Design I.EM.S as soon as possible ", bg="grey")
label.pack()
label1.pack()
label2.pack()
label3.pack()
label4.pack()

#*******Home Page Title*********

label5 = Label(root, text="M.A.P", font=("Helvetica", 50), bg="grey")
label5.pack(side=TOP)









root.mainloop()

万分感谢!

1 个答案:

答案 0 :(得分:0)

使用.place()

  

在绝对定位中,程序员以像素为单位指定每个小部件的位置和大小。如果调整窗口大小,窗口小部件的大小和位置不会改变。

.place()使用x和y坐标指定窗口上的位置。

示例:

Label.place(x=40, y=50)

以下是.pack(),. grid()和.place()的完整说明的URL: http://zetcode.com/gui/tkinter/layout/

请注意: .grid()是一个更好,更有条理的方式来创建一个Tkinter窗口。如果您使用STICKY参数(它允许您比单个单元格更具体),它不会像您想象的那样受限制。我不会走得太远,因为它不是问题的一部分。但我宁愿你使用.grid()而不是.place()