我正在为我的程序使用闪屏,但问题是我希望画布以小尺寸显示在屏幕的中心。如果我调整大小,它就会离开屏幕的中心。代码是:
- import Tkinter as tk
-
- root = tk.Tk()
- # show no frame
- root.overrideredirect(True)
- width = root.winfo_screenwidth()
- height = root.winfo_screenheight()
- root.geometry('%dx%d+%d+%d' % (width*0.8, height*0.8, width*0.1, height*0.1))
-
- image_file = "10.gif"
-
- # use Tkinter's PhotoImage for .gif files
- image = tk.PhotoImage(file=image_file)
- canvas = tk.Canvas(root, height=height*0.8, width=width*0.8, bg="brown")
- canvas.create_image(width*0.8/2, height*0.8/2, image=image)
- canvas.pack()
-
- # show the splash screen for 1000 milliseconds then destroy
- root.after(1000, root.destroy)
- root.mainloop()
# 回答1
我不明白你有什么问题。如果调整小部件的大小,还必须调整其位置以使其保持在屏幕中心。
# 回答3
纳粹泽拉,
您的评论
"但它不工作,我不能理解它:("
并不能帮助我们理解您的问题。有什么地方不起作用呢?您是否收到错误?如果是,回溯中包含哪些内容?除非你帮我们,否则我们不能帮你。
# 回答4
你只是在为几何学而苦苦挣扎吗?
如果m,n是图像的宽度、长度和
M,N是画布的宽度、长度,则角坐标为
((M-m)/2,(N-n)/2)
# 回答5
我不能调整坐标。程序没有给出任何错误。我只对画布的坐标和大小有问题。
图像大小为150*150,无法调整画布的大小和位置
# 回答6
使用PIL确定图像大小并计算闪屏在屏幕上居中的位置非常简单。
- import Tkinter as tk
- from PIL import Image
-
- image_name = "10.gif"
- image_size = Image.open(image_name).size
-
- root = tk.Tk()
- # show no frame
- root.overrideredirect(True)
- width = root.winfo_screenwidth()
- height = root.winfo_screenheight()
- x = (width-image_size[0])/2.
- y = (height-image_size[1])/2.
-
- root.geometry('%dx%d+%d+%d' % (image_size[0], image_size[1], x, y))
-
- image = tk.PhotoImage(file=image_name)
- canvas = tk.Canvas(root, height=image_size[1], width=image_size[0], bg="white")
- canvas.create_image(0, 0, anchor="nw", image=image)
- canvas.pack()
-
- root.after(5000, root.destroy)
- root.mainloop()
# 回答8
现在闪屏问题解决了,但是当我从另一个程序调用这个闪屏程序时,闪屏显示出来了,但我做的程序的图形用户界面却没有显示出来。程序运行时没有任何错误,显示了闪屏,但没有显示我在那个程序中做的界面
- import splashprog
- splashprog.splash()#for splash screen
- root = Tk()#my program interface
- .....#code of my program
- root.mainloop()
-
# 回答9
您希望将代码放在一个函数中,然后从另一个程序调用该函数。您可能必须将"根"发送到另一个程序,并在第一个程序中使用TopLevel,这取决于第二个程序的功能。
- import splashprog
- root = Tk()#my program interface
- splashprog.splash(root) #for splash screen
- .....#code of my program
- root.mainloop()
我使用的类型的一个示例
- ##------------- first program --------------------------
- class splash():
- def __init__(self, tk, root):
- self.new_gui = tk.Toplevel(root)
- lab = tk.Label(self.new_gui, text="test of calling another program")
- lab.pack()
-
- def stop(self):
- print "stop called"
- self.new_gui.destroy()
-
- ##------------- second program --------------------------
- try:
- import Tkinter as tk ## Python 2.x
- except ImportError:
- import tkinter as tk ## Python 3.x
-
- import first_prog
- root=tk.Tk()
- n=first_prog.splash(tk, root)
- root.after(2000, n.stop) ## destroy "splash" after 2 seconds
- root.after(3000, root.quit) ## root remains 1 second longer
- root.mainloop()