启动屏幕问题

我正在为我的程序使用闪屏,但问题是我希望画布以小尺寸显示在屏幕的中心。如果我调整大小,它就会离开屏幕的中心。代码是:

选择 | 换行 | 行号
  1. import Tkinter as tk
  2.  
  3. root = tk.Tk()
  4. # show no frame
  5. root.overrideredirect(True)
  6. width = root.winfo_screenwidth()
  7. height = root.winfo_screenheight()
  8. root.geometry('%dx%d+%d+%d' % (width*0.8, height*0.8, width*0.1, height*0.1))
  9.  
  10. image_file = "10.gif"
  11.  
  12. # use Tkinter's PhotoImage for .gif files
  13. image = tk.PhotoImage(file=image_file)
  14. canvas = tk.Canvas(root, height=height*0.8, width=width*0.8, bg="brown")
  15. canvas.create_image(width*0.8/2, height*0.8/2, image=image)
  16. canvas.pack()
  17.  
  18. # show the splash screen for 1000 milliseconds then destroy
  19. root.after(1000, root.destroy)
  20. root.mainloop()
# 回答1


我不明白你有什么问题。如果调整小部件的大小,还必须调整其位置以使其保持在屏幕中心。
# 回答2


但是它不工作,我不能理解它:
# 回答3


纳粹泽拉,
您的评论
"但它不工作,我不能理解它:("
并不能帮助我们理解您的问题。有什么地方不起作用呢?您是否收到错误?如果是,回溯中包含哪些内容?除非你帮我们,否则我们不能帮你。
# 回答4


你只是在为几何学而苦苦挣扎吗?
如果m,n是图像的宽度、长度和
M,N是画布的宽度、长度,则角坐标为
((M-m)/2,(N-n)/2)
# 回答5


我不能调整坐标。程序没有给出任何错误。我只对画布的坐标和大小有问题。
图像大小为150*150,无法调整画布的大小和位置
# 回答6


使用PIL确定图像大小并计算闪屏在屏幕上居中的位置非常简单。

选择 | 换行 | 行号
  1. import Tkinter as tk
  2. from PIL import Image
  3.  
  4. image_name = "10.gif"
  5. image_size = Image.open(image_name).size
  6.  
  7. root = tk.Tk()
  8. # show no frame
  9. root.overrideredirect(True)
  10. width = root.winfo_screenwidth()
  11. height = root.winfo_screenheight()
  12. x = (width-image_size[0])/2.
  13. y = (height-image_size[1])/2.
  14.  
  15. root.geometry('%dx%d+%d+%d' % (image_size[0], image_size[1], x, y))
  16.  
  17. image = tk.PhotoImage(file=image_name)
  18. canvas = tk.Canvas(root, height=image_size[1], width=image_size[0], bg="white")
  19. canvas.create_image(0, 0, anchor="nw", image=image)
  20. canvas.pack()
  21.  
  22. root.after(5000, root.destroy)
  23. root.mainloop()
# 回答7


谢谢你,成功了,你解决了我的问题
# 回答8


现在闪屏问题解决了,但是当我从另一个程序调用这个闪屏程序时,闪屏显示出来了,但我做的程序的图形用户界面却没有显示出来。程序运行时没有任何错误,显示了闪屏,但没有显示我在那个程序中做的界面

选择 | 换行 | 行号
  1. import splashprog
  2. splashprog.splash()#for splash screen
  3. root = Tk()#my program interface
  4. .....#code of my program
  5. root.mainloop()
  6.  
# 回答9


您希望将代码放在一个函数中,然后从另一个程序调用该函数。您可能必须将"根"发送到另一个程序,并在第一个程序中使用TopLevel,这取决于第二个程序的功能。

选择 | 换行 | 行号
  1. import splashprog
  2.  root = Tk()#my program interface
  3.  splashprog.splash(root)     #for splash screen
  4.  .....#code of my program
  5.  root.mainloop() 

我使用的类型的一个示例

选择 | 换行 | 行号
  1. ##------------- first program --------------------------
  2. class splash():
  3.     def __init__(self, tk, root):
  4.         self.new_gui = tk.Toplevel(root)
  5.         lab = tk.Label(self.new_gui, text="test of calling another program")
  6.         lab.pack()
  7.  
  8.     def stop(self):
  9.         print  "stop called"
  10.         self.new_gui.destroy()
  11.  
  12. ##------------- second program --------------------------
  13. try:
  14.     import Tkinter as tk     ## Python 2.x
  15. except ImportError:
  16.     import tkinter as tk     ## Python 3.x
  17.  
  18. import first_prog
  19. root=tk.Tk()
  20. n=first_prog.splash(tk, root)
  21. root.after(2000, n.stop)    ## destroy "splash" after 2 seconds
  22. root.after(3000, root.quit) ## root remains 1 second longer
  23. root.mainloop() 

标签: python

添加新评论