为什么我的tkinter gui在右侧被切断?

rdlzhqv9  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(414)

我刚刚进入python,一直在使用tkinter设计GUI,到目前为止,这很有趣。我一直在尝试使用框架,如果你愿意的话,我试图将屏幕分成3个“窗格”。出于某种原因,即使组合宽度小于总宽度,它仍然会超出屏幕的边界。
就我个人而言,我不明白为什么右边的紫色边框被剪掉了。
我有点怀疑我使用padx和pady的次数。我也很好奇它是否与grid_propagate或pack_propagate有关,这就是我为什么这么多次使用它的原因。
感谢您的帮助。
结果

  1. import tkinter as tk
  2. from tkinter import *
  3. from tkinter import filedialog
  4. import matplotlib
  5. matplotlib.use("TkAgg")
  6. from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
  7. from matplotlib.figure import Figure
  8. def close():
  9. exit()
  10. # --------------------------------------------------------------
  11. # Root Stuff
  12. root = tk.Tk()
  13. root.title('rough frame gui test v1')
  14. root.geometry('1920x1080')
  15. root.attributes('-fullscreen', False)
  16. root.state('zoomed')
  17. root.iconphoto(False, tk.PhotoImage(file='C:/Users/Trevor/OneDrive - Providence College/Research/Summer 2021/Single Py Files/spec_icon.png'))
  18. # --------------------------------------------------------------
  19. # A couple Random Functions
  20. def donothing():
  21. print('nothing')
  22. def close():
  23. root.destroy()
  24. # ---------------------------------------------------------------
  25. # 0 - Main Frame
  26. # root = Frame(root)
  27. # root.grid(row=0, column=0, sticky="nswe")
  28. # ---------------------------------------------------------------
  29. # 1 - Navigation Frame
  30. frameNav = Frame(root, bg="blue", height=500, width=480)
  31. frameNav.grid(row=0, column=0, sticky=N)
  32. frameNav.grid_propagate(True)
  33. global canvasNav
  34. canvasNav = Canvas(frameNav, bg="white", height=500, width=480, bd=2, relief=SUNKEN)
  35. canvasNav.grid(row=0, column=0, sticky="nswe", padx=5, pady=5)
  36. canvasNav.grid_propagate(False)
  37. navTitle = Label(canvasNav, bg='white', text="Current Database:", bd=2, anchor=CENTER)
  38. navTitle.grid(row=0, column=0, padx=5, pady=5)
  39. navPane = Label(canvasNav, bg='white', text="NAVIGATION PANE", bd=2, anchor=CENTER)
  40. navPane.grid(row=2, column=0, padx=5, pady=5)
  41. # ---------------------------------------------------------------
  42. # 2 - Graph Frame
  43. frameGraph = Frame(root, bg="green", height=500, width=960)
  44. frameGraph.grid(row=0, column=1, sticky=N)
  45. frameGraph.grid_propagate(True)
  46. global canvasGraph
  47. canvasGraph = Canvas(frameGraph, bg="white", height=500, width=960, bd=2, relief=SUNKEN)
  48. canvasGraph.grid(row=0, column=0, sticky="nswe", padx=5, pady=5)
  49. canvasGraph.grid_propagate(False)
  50. loadGraph = Button(canvasGraph, text="Load Graph", bd=2, anchor=CENTER)
  51. loadGraph.grid(row=0, column=0, sticky=S, padx=5, pady=5)
  52. # ---------------------------------------------------------------
  53. # 3 - Tasks Frame
  54. frameTasks = Frame(root, bg="purple", height=500, width=400)
  55. frameTasks.grid(row=0, column=2, sticky=N)
  56. frameTasks.grid_propagate(True)
  57. global bFrameTasks
  58. bFrameTasks = Canvas(frameTasks, bg="white", height=500, width=400, bd=2, relief=SUNKEN)
  59. bFrameTasks.grid(row=0, column=0, sticky="nswe", padx=5, pady=5)
  60. bFrameTasks.grid_propagate(True)
  61. # ---------------------------------------------------------------
  62. # FUNCTION TO HIDE WINDOWS (TASKS)
  63. #
  64. def toggleTasks():
  65. try:
  66. global bFrameTasks
  67. print(bFrameTasks.winfo_exists())
  68. if bFrameTasks.winfo_exists() == 1:
  69. print("Destroying package...")
  70. bFrameTasks.destroy()
  71. else:
  72. bFrameTasks = tk.Frame(frameTasks, bg="white", height=500, width=480, bd=2, relief=SUNKEN)
  73. bFrameTasks.pack(padx=5, pady=5)
  74. except Exception as e:
  75. print(e)
  76. print('An error has occurred...')
  77. # ---------------------------------------------------------------
  78. # end
  79. # ---------------------------------------------------------------
  80. # FUNCTION TO HIDE WINDOWS (GRAPH)
  81. #
  82. def toggleGraph():
  83. try:
  84. global canvasGraph
  85. print(canvasGraph.winfo_exists())
  86. if canvasGraph.winfo_exists() == 1:
  87. print('Destroying package...')
  88. canvasGraph.destroy()
  89. else:
  90. canvasGraph = tk.Canvas(frameGraph, bg="white", height=500, width=960, bd=2, relief=SUNKEN)
  91. canvasGraph.pack(padx=5,pady=5)
  92. except Exception as e:
  93. print(e)
  94. print('An error has occurred...')
  95. # ---------------------------------------------------------------
  96. # end
  97. # ---------------------------------------------------------------
  98. # FUNCTION TO HIDE WINDOWS (NAVIGATION)
  99. #
  100. def toggleNav():
  101. try:
  102. global canvasNav
  103. print(canvasNav.winfo_exists())
  104. if canvasNav.winfo_exists():
  105. print('Destroying...')
  106. canvasNav.destroy()
  107. else:
  108. canvasNav = tk.Canvas(frameNav, bg="white", height=500, width=480, bd=2, relief=SUNKEN)
  109. canvasNav.pack(padx=5,pady=5)
  110. except Exception as e:
  111. print(e)
  112. print('An error has occurred')
  113. # ---------------------------------------------------------------
  114. # end
  115. def fileExplore():
  116. dbFolder = filedialog.askdirectory(initialdir = '/', title = 'Select Database Folder')
  117. print(dbFolder) #working! just need to get it to display to a widget
  118. folderName = tk.Label(canvasNav, bg='gray', text=dbFolder)
  119. folderName.grid(row=1, column=0, sticky=N, padx=5, pady=5)
  120. # ---------------------------------------------------------------
  121. # MENU
  122. menuBar = Menu(root)
  123. fileMenu = Menu(menuBar, tearoff=0)
  124. menuBar.add_cascade(label="File", menu=fileMenu)
  125. fileMenu.add_command(label="Open Database Folder", command=fileExplore)
  126. fileMenu.add_command(label="Save", command=donothing)
  127. fileMenu.add_command(label="Save as...", command=donothing)
  128. fileMenu.add_separator()
  129. fileMenu.add_command(label="Exit...", command=close)
  130. hideMenu = Menu(menuBar, tearoff=0)
  131. menuBar.add_cascade(label="Hide", menu=hideMenu)
  132. hideMenu.add_checkbutton(label="Task Bar", command=toggleTasks)
  133. hideMenu.add_checkbutton(label="Graph", command=toggleGraph)
  134. hideMenu.add_checkbutton(label="Navigation", command=toggleNav)
  135. # ---------------------------------------------------------------
  136. root.config(menu=menuBar)
  137. root.mainloop()
c3frrgcw

c3frrgcw1#

我承认除了知道如何安装它之外,我对tkinter几乎一无所知。然而,我复制了你的代码并尝试了一下。在玩过之后,我发现了以下信息:

  1. width = root.winfo_screenwidth()
  2. height = root.winfo_screenheight()

源于如何将根窗口大小设置为屏幕宽度和高度的一半
我想这对我来说是可行的,但我在侧面有我的开始菜单,所以我从宽度中减去了足够多的像素,使它看起来很漂亮。对你有用吗?
我会用这两个函数来做类似的事情 root.geometry(f'{width}x{height}') 而不是在屏幕尺寸中硬编码。我把结果打印出来了 widthheight ,还没有找到原因,但它们与windows10报告的维度不同,所以我还没有找到原因。但基本上,您已经超出了python实际使用的维度。

相关问题