Tkinter GUI 程序中 Canvas object 与其 parent 顶层 object 右侧之间的间隙
A gap between a Canvas object and its parent Toplevel object right side in a Tkinter GUI program
我正在使用 Tkinter 开发 GUI 程序。它将在 7" 触摸屏、全屏上工作。
首先我做了主标题
import Tkinter as tk
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 480
class Application(tk.Toplevel):
def __init__(self, *args, **kwargs):
tk.Toplevel.__init__(self, *args, **kwargs)
self.overrideredirect(True)
self.wm_geometry("800x480")
self.cnvs = None
self.showTitle()
def showTitle(self):
self.config(bg = 'white', borderwidth = 0)
self.cnvs = TitleCanvas(self)
self.cnvs.grid(sticky = tk.N + tk.E + tk.W + tk.S)
class TitleCanvas(tk.Canvas):
def __init__(self, parent):
tk.Canvas.__init__(self, parent, width = SCREEN_WIDTH, height = SCREEN_HEIGHT)
self.widgets = {}
self.init_ui()
def init_ui(self):
# BG Color: White
self.config(bg = 'white', borderwidth = 0)
# Blank Area
# Row: 0
self.lblBlank = tk.Label(self, background = 'white', borderwidth = 0, text = '')
self.lblBlank.grid(pady = 20, row = 0)
# Title Image
# Row: 1
self.photoLogo = tk.PhotoImage(file = 'samplelogo.gif')
self.lblLogo = tk.Label(self, image = self.photoLogo)
self.lblLogo.grid(padx = 100, pady = 40, row = 10, sticky = tk.E + tk.W)
# Text1
# Row: 2
self.lblLoad = tk.Label(self, background = 'white',
font = ("Helvetica", -30), text = "Loading...")
self.lblLoad.grid(pady = 60, row = 2, sticky = tk.E + tk.W)
# Text2
# Row: 3
self.lblVer = tk.Label(self, background = 'white',
font = ("Helvetica", -30), text = "Company and Version")
self.lblVer.grid(pady = 30, row = 3, sticky = tk.E + tk.W)
app = Application()
app.mainloop()
Canvas object 应该填满整个屏幕。但它没有到达右侧的边缘。
要消除差距,我应该怎么做?
我用 create_image() 和 create_text() 解决了这个问题。这些方法能够设置小部件的位置。
TitleCanvas.init_ui()方法可以这样修改;
def init_ui(self):
#BG Color: White
self.config(bg = 'white', borderwidth = 0)
# Background
self.create_rectangle((0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), fill = 'white')
# Title Image
#Center Point: (400, 160)
self.photoLogo = tk.PhotoImage(file = 'samplelogo.gif')
self.create_image(400, 160, anchor = tk.CENTER, image = self.photoLogo)
# Text1
self.create_text((400, 315), text = 'Loading...')
# Text2
self.create_text((400, 435), text = 'Company and Version')
我正在使用 Tkinter 开发 GUI 程序。它将在 7" 触摸屏、全屏上工作。 首先我做了主标题
import Tkinter as tk
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 480
class Application(tk.Toplevel):
def __init__(self, *args, **kwargs):
tk.Toplevel.__init__(self, *args, **kwargs)
self.overrideredirect(True)
self.wm_geometry("800x480")
self.cnvs = None
self.showTitle()
def showTitle(self):
self.config(bg = 'white', borderwidth = 0)
self.cnvs = TitleCanvas(self)
self.cnvs.grid(sticky = tk.N + tk.E + tk.W + tk.S)
class TitleCanvas(tk.Canvas):
def __init__(self, parent):
tk.Canvas.__init__(self, parent, width = SCREEN_WIDTH, height = SCREEN_HEIGHT)
self.widgets = {}
self.init_ui()
def init_ui(self):
# BG Color: White
self.config(bg = 'white', borderwidth = 0)
# Blank Area
# Row: 0
self.lblBlank = tk.Label(self, background = 'white', borderwidth = 0, text = '')
self.lblBlank.grid(pady = 20, row = 0)
# Title Image
# Row: 1
self.photoLogo = tk.PhotoImage(file = 'samplelogo.gif')
self.lblLogo = tk.Label(self, image = self.photoLogo)
self.lblLogo.grid(padx = 100, pady = 40, row = 10, sticky = tk.E + tk.W)
# Text1
# Row: 2
self.lblLoad = tk.Label(self, background = 'white',
font = ("Helvetica", -30), text = "Loading...")
self.lblLoad.grid(pady = 60, row = 2, sticky = tk.E + tk.W)
# Text2
# Row: 3
self.lblVer = tk.Label(self, background = 'white',
font = ("Helvetica", -30), text = "Company and Version")
self.lblVer.grid(pady = 30, row = 3, sticky = tk.E + tk.W)
app = Application()
app.mainloop()
Canvas object 应该填满整个屏幕。但它没有到达右侧的边缘。 要消除差距,我应该怎么做?
我用 create_image() 和 create_text() 解决了这个问题。这些方法能够设置小部件的位置。
TitleCanvas.init_ui()方法可以这样修改;
def init_ui(self):
#BG Color: White
self.config(bg = 'white', borderwidth = 0)
# Background
self.create_rectangle((0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), fill = 'white')
# Title Image
#Center Point: (400, 160)
self.photoLogo = tk.PhotoImage(file = 'samplelogo.gif')
self.create_image(400, 160, anchor = tk.CENTER, image = self.photoLogo)
# Text1
self.create_text((400, 315), text = 'Loading...')
# Text2
self.create_text((400, 435), text = 'Company and Version')