如何使python中的tkinter小部件“.place()”方法与Java中的“.setbounds()”方法类似?

2024-09-30 00:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

Python3.4和Eclipse IDE

我有一个java表单正在翻译成pythontkinter。我有许多jlabel、jtextfields、jcombobox和一个分隔符行,它们需要与相应的python小部件对应放在相同的python表单上。在

使用特定定位的java标签示例:

    JLabel lblWhichTrip = new JLabel("Which Trip:");
    lblWhichTrip.setHorizontalAlignment(SwingConstants.RIGHT);
    lblWhichTrip.setFont(new Font("Tahoma", Font.PLAIN, 16));
    lblWhichTrip.setBounds(64, 22, 135, 20);
    frmBookCalc.getContentPane().add(lblWhichTrip);

在50个奇怪的浏览器选项卡之后,python的等价项应该是:

^{pr2}$

但是这个小部件根本不会出现,甚至不会出现在错误的位置。在

我想在python中使用“.place()”方法的原因与我在java中使用特定定位的原因相同,人们对“.pack()”方法几乎没有精确的控制。在

在一个例子中,我发现了一个“.pack()”方法直接在“.place()”方法之前被调用的例子,但是更多的例子只使用了“.place()”。在

所以问题是:

如何利用“.place()”方法将pythontkinter小部件放在python表单上,就像我对Java表单所做的那样?我知道我很接近,但它不起作用。在

随着更多的工作,我发现下面的按钮将把一个按钮在我的表格,但标签部分是空白的,如上所述。在

    languages = ['Python','Perl','C++','Java','Tcl/Tk']
    labels = range(5)
    for i in range(5):
        ct = [random.randrange(256) for x in range(3)]
        brightness = int(round(0.299*ct[0] + 0.587*ct[1] + 0.114*ct[2]))
        ct_hex = "%02x%02x%02x" % tuple(ct)
        bg_colour = '#' + "".join(ct_hex)
        l = Label(self, text=languages[i], fg='White' if brightness < 120 else 'Black', bg=bg_colour)
        l.place(x = 20, y = 30 + i*30, width=120, height=25)

     self.QUIT = Button(self)
     self.QUIT["text"] = "QUIT"
     self.QUIT["fg"]   = "red"
     self.QUIT["command"] =  self.quit
     self.QUIT.pack({"side": "left"})

这种形式是在一个由“自我”一词表示的类结构中形成的。我不知道为什么按钮会显示在表单上,但是标签不会。唯一的区别是使用了“.pack()”和“.place()”方法。从我的研究来看,它们在功能上是一样的,只是用了不同的方式。在

我看过很多我眼睛受伤的例子。如果有人能澄清这件事,我将永远感激。在

参考文献: Reference for tkinter

更新:

“.place()”不喜欢在类中,或者我不知道如何在类中实例化它。我通过忽略我想要使用的类结构来实现它。如何让“.place()”在类内工作?在

更新:

import tkinter as tk
import random

root = tk.Tk()

w = 465
h = 590        
x = (root.winfo_screenwidth()/2) - (w/2)
y = (root.winfo_screenheight()/2) - (h/2)
root.minsize(width=w, height=h)
root.maxsize(width=w, height=h)
root.resizable(width=tk.FALSE, height=tk.FALSE)
root.geometry('%dx%d+%d+%d' % (w, h, x, y))
root.configure(background='white')

root.option_add("*font", "Tahoma 12")
root.title("Book Calc")

lblWhichTrip = tk.Label(root, text = "Which Trip:", bg = "white", anchor = "e")
lblWhichTrip.place(x=200, y=30, height=135, width=20)

root.mainloop()

我抛弃了py文件和包含所有表单内容的类,只为一个文件直接编写代码,现在标签不再可见。上面的代码就是目前我程序的全部。我希望我能尽快解决这个问题。在

更新:

高度和宽度需要在适当的地方,而不是标签。以上代码已修改。在


Tags: 方法self表单placeroot标签widthpack
1条回答
网友
1楼 · 发布于 2024-09-30 00:34:16
lblWhichTrip = tk.Label(root, text = "Which Trip:", bg = "white", anchor = "e")
lblWhichTrip.place(x=200, y=30, height=135, width=20)

这在类结构之外运行得非常好,但在类内部似乎不起作用。这是我上面关于在python表单上的特定位置放置标签或其他小部件的问题的一半答案。在

另一半的问题仍然没有得到回答,因为这个解决方案在类内部不起作用,它应该这样做。如果有人能对此有所了解,那就太好了。其他人会想写一个比我更健壮的程序,所以需要一个比这个更好的答案。在

谢谢。在

更新:

^{pr2}$

以上是创建类的时候。根目录需要直接发送。在

def __init__(self, master):
   self.parent = master

一个指向根的指针需要设置一个类变量来实现持久性。在

lblWhichTrip = tk.Label(root, text = "Which Trip:", bg = "white", anchor = "e")
lblWhichTrip.place(x=85, y=-35, height=135, width=100)

然后你可以在一个类中创建你想要的所有小部件,所有的布局引擎都能正常工作。包装、放置和网格将完美工作。在

尽职尽责。在

参考文献: Additional info here

相关问题 更多 >

    热门问题