解释: def center_window(self): screenwidth = log.winfo_screenwidth() screenheight = log.winfo_screenheight() log.update() width = log.winfo_width() height = log.winfo_height() size = '+%d+%d' % ((screenwidth - width)/2, (screenheight - height)/2) log.geometry(size)
时间: 2023-11-30 07:02:16 浏览: 37
这段代码是在Python中使用Tkinter模块创建GUI界面时用于将窗口居中显示的函数。具体来说,它通过获取屏幕的宽度和高度,以及当前窗口的宽度和高度,计算出窗口左上角相对于屏幕左上角的坐标,从而使窗口在屏幕中居中显示。其中,`log`是一个Tkinter窗口对象,`winfo_screenwidth()`和`winfo_screenheight()`方法分别获取屏幕的宽度和高度,`winfo_width()`和`winfo_height()`方法分别获取窗口的宽度和高度,`geometry()`方法用于设置窗口的大小和位置。
相关问题
class LoginWindow: def __init__(self, master): self.master = master self.master.title("Login Window") self.master.geometry("300x250") self.master.resizable(0, 0) self.username = tk.StringVar() self.password = tk.StringVar()class ExcelApp: def __init__(self, master): self.master = master master.title("Excel App") # 获取屏幕的宽度和高度 screen_width = master.winfo_screenwidth() screen_height = master.winfo_screenheight() # 将窗口的大小设置为屏幕的大小 master.geometry("%dx%d" % (screen_width, screen_height)) master.state('zoomed')#窗口最大化# 查询窗口 class QueryWindow: def __init__(self, master): self.master = master master.title("查詢窗口") # 获取屏幕的宽度和高度 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() # 将窗口的大小设置为屏幕的大小 master.geometry("%dx%d" % (screen_width, screen_height)) master.state('zoomed')#窗口最大化if __name__ == '__main__': root = tk.Tk() app = LoginWindow(root) root.mainloop()這個代碼中我有三個窗口,第一個銷毀后第三個就報self.tk.call( _tkinter.TclError: can't invoke "toplevel" command: application has been destroyed怎麽解決
你的问题可能是因为你在第三个窗口中使用了 `root`,而 `root` 在第一个窗口销毁后已经被销毁了。你可以在第三个窗口中使用 `master`,即 `QueryWindow` 类的 `__init__` 方法中的 `master`,这个变量是当前窗口的主 `Tk()` 对象。修改后的代码如下:
```
class LoginWindow:
def __init__(self, master):
self.master = master
self.master.title("Login Window")
self.master.geometry("300x250")
self.master.resizable(0, 0)
self.username = tk.StringVar()
self.password = tk.StringVar()
class ExcelApp:
def __init__(self, master):
self.master = master
master.title("Excel App")
# 获取屏幕的宽度和高度
screen_width = master.winfo_screenwidth()
screen_height = master.winfo_screenheight()
# 将窗口的大小设置为屏幕的大小
master.geometry("%dx%d" % (screen_width, screen_height))
master.state('zoomed') # 窗口最大化
# 查询窗口
class QueryWindow:
def __init__(self, master):
self.master = master
self.master.title("查詢窗口")
# 获取屏幕的宽度和高度
screen_width = self.master.winfo_screenwidth()
screen_height = self.master.winfo_screenheight()
# 将窗口的大小设置为屏幕的大小
self.master.geometry("%dx%d" % (screen_width, screen_height))
self.master.state('zoomed') # 窗口最大化
if __name__ == '__main__':
root = tk.Tk()
app = LoginWindow(root)
root.mainloop()
```
这样,你就可以在第三个窗口中使用 `self.master`(也可以用 `master`)代替 `root`,避免了 `root` 被销毁后出现的问题。
root.resizable(0, 0) root.wm_attributes("-toolwindow", 1) screenwidth = root.winfo_screenwidth() screenheight = root.winfo_screenheight() widths = 300 heights = 100
这段代码是用来控制窗口的大小和位置的。具体来说:
- `root.resizable(0, 0)` 表示窗口不可调整大小。
- `root.wm_attributes("-toolwindow", 1)` 表示将窗口设置为工具栏窗口,这样在任务栏中不会显示窗口图标。
- `screenwidth = root.winfo_screenwidth()` 和 `screenheight = root.winfo_screenheight()` 分别获取屏幕的宽度和高度。
- `widths = 300` 和 `heights = 100` 分别设置窗口的宽度和高度为 300 像素和 100 像素。
如果你想让窗口在屏幕中央打开,可以使用以下代码:
```
root.geometry('%dx%d+%d+%d' % (widths, heights, (screenwidth - widths) / 2, (screenheight - heights) / 2))
```
它会将窗口的左上角位置设置为屏幕中央。