tkinter gui格式化菜单的框架(pyhon2.7)

时间:2015-06-05 15:58:31

标签: python python-2.7 tkinter

我目前是一名参加初学者编程课程的高中生。我们刚开始在python中学习Tkinter的新单元,我对我们的项目有几个问题。我决定做一个制作货币转换器的项目。我完成了关于api的一切,现在我在制作gui时遇到了障碍。我在将按钮移动到所需位置时遇到问题。目前我的按钮卡在中间,如果我更改行和列,它会移动到随机位置并破坏白色背景。任何帮助将不胜感激!

非常感谢。

import Tkinter as tk
import tkMessageBox

CURRENCY_CODES = ('USD','GDP')

class Application(tk.Frame):
    def __init__(self, parent = None):
        tk.Frame.__init__(self, parent)
        self.parent = parent
        self.setupUI()
        self.createWidgets()

    def setupUI(self):
        self.parent.title("User Input")
        self.grid()
        self.centerWindow()

    def centerWindow(self):
        app_width = 307
        app_height = 350

        sw = self.parent.winfo_screenwidth()
        sh = self.parent.winfo_screenheight()

        x = (sw - app_width)/2
        y = (sh - app_height)/2
        self.parent.geometry('%dx%d+%d+%d' % (app_width, app_height, x, y))

    def createWidgets(self):
        self.emptyFrame = tk.Frame(self.parent,bg="white")
        self.emptyFrame.grid(row=0,column=0,sticky="news")
        self.parent.grid_columnconfigure(0,weight=1)
        self.parent.grid_rowconfigure(0,weight=1)

2 个答案:

答案 0 :(得分:0)

你可以随便携带'x'& 'y'坐标如此,

        self.currencyMenu.place(x = 10, y = 250) 

答案 1 :(得分:0)

您的问题没有显示完整的程序,也没有显示任何按钮,因此无法告诉您所有问题。但是,你正在做一些肯定会引导你走错路的事情。

第一个问题是:

self.grid()

作为一般规则,创建窗口小部件的功能是应该使用几何管理器添加窗口小部件的功能。无论你打电话Application(),都应负责将框架放入其容器中。

app = Application(root)
app.grid(...)

其次,是这行代码:

self.emptyFrame = tk.Frame(self.parent,bg="white")

框架或根窗口的子项(Application是)应该永远不要将窗口小部件放在自身之外。 Application内的所有内容都应该在Application内。否则就不可能兼顾所有的几何管理。该空框架必须位于Application内(例如:self):

self.emptyFrame = tk.Frame(self, bg="white")

如果你有一个继承自其他一些widget类的类,它应该只影响它自己,它的子元素是 1 。它永远不应该做任何影响其父母的事情。如果您坚持这一原则,那么小部件布局就会变得更加容易。

1 我意识到互联网上有很多违反这一原则的例子,但他们都做错了。虽然对于简单的应用程序来说它或多或少都可以,但它很快就会成为复杂应用程序的负担。如果你在简单的应用程序上练习正确的编码,那么当你毕业于更复杂的应用程序时,你就不必改变你的技术。