Python 3.4和Eclipse IDE
我有一个java表单,我正在翻译成python tkinter。我有许多jlabels,jtextfields,jcomboboxes和一个分隔线,需要放在一个相同的python表单上,并与各自的python widget对应。
使用特定定位的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等价物应该是:
self.lblWhichTrip = Label(self, text = "Which Trip:", bg = "white", anchor = "e")
self.lblWhichTrip.place(x = 64, y = 22, height=135, width=20)
但是小部件根本没有出现,甚至没有出现在错误的地方。
我想使用" .place()" python中的方法与我在java中使用特定定位的原因相同,人们对" .pack()"的精确控制很少。方法
有一个实例,我找到了" .pack()"的一个例子。在" .place()"之前直接调用方法方法,但更多的例子只是" .place()"只用过。
所以这就是问题:
我如何利用" .place()"类似地将python tkinter小部件放在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"})
表格是在一个类结构中制作的,如术语&#34; self&#34;所示。我不知道为什么按钮会在表单上显示,但标签不会。唯一的区别是&#34; .pack()&#34;和&#34; .place()&#34;使用的方法。根据我的研究,它们在功能上是相同的,它们只是以不同的方式进行。
我看了很多眼睛受伤的例子。如果有人能够清除这一点我会永远感激。
更新
&#34; .place()&#34;不喜欢在课堂上或我不知道如何在课堂上实例化它。我通过忽略我想要使用的类结构来实现它。我如何得到&#34; .place()&#34;在班里工作?
更新
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文件和包含所有表单内容的类,其中包含直接代码的单个文件,现在标签再次不可见。上面的代码是我目前的整个程序。我希望我能很快解决这个问题。
更新
高度和宽度需要到位,而不是标签。以上代码已修改。
答案 0 :(得分:-1)
lblWhichTrip = tk.Label(root, text = "Which Trip:", bg = "white", anchor = "e")
lblWhichTrip.place(x=200, y=30, height=135, width=20)
这在类结构之外工作得非常好,但它似乎不适用于类内部。对于我上面的问题,这是将标签或其他小部件放在python表单上的特定位置的答案的一半。
问题的另一半仍然没有答案,因为这个解决方案在类中不起作用。如果有人能够对此有所了解,那就太棒了。其他人会想要写一个比我现在更强大的程序,所以需要一个比这更好的答案。
谢谢。
更新
root = tk.Tk()
app = Application(root)
以上是您创建课程时的情况。 Root需要直接发送。
def __init__(self, master):
self.parent = master
指向root的指针需要为持久性设置类var。
lblWhichTrip = tk.Label(root, text = "Which Trip:", bg = "white", anchor = "e")
lblWhichTrip.place(x=85, y=-35, height=135, width=100)
然后你可以在一个类中创建你想要的所有小部件,所有的布局引擎都可以正常工作。 Pack,Place和Grid将完美运行。
尽职尽责地回答。
Refernce: Additional info here