为什么画布在添加小部件时不使用滚动条滚动和自动调整大小?

叶期

当我将小部件放到画布中时,这些小部件会绕过画布大小。但是,当我滚动时,画布不会移动。
最重要的是,当我添加更多小部件时,画布会自动调整大小。我以为画布不应该调整大小,因为我已经添加了滚动条?

这是我的代码:

from tkinter import *
from tkinter import ttk
import mysql.connector

class CanvasScroll:

    def on_resize(self,event):
        self.canvas.config(width = 1185, height = 530)

    def add_crew(self):
        crewFrame = CrewFrame()


    def callback_list(self):
        index = self.notebook.index(self.notebook.select()) + 1
        self.tmpframe = Try2(self.contentframe, index)


    def __init__(self, master):
        self.canvas = Canvas(master, width = 1185, height = 530, scrollregion = (0, 0, 1216, 700), bg = 'white', confine = True)
        self.canvas.grid(row = 2, column = 0, sticky = 'news')

        self.xscroll = ttk.Scrollbar(master, orient = HORIZONTAL, command = self.canvas.xview)
        self.xscroll.grid(row = 3, column = 0, sticky = 'we')

        self.yscroll = ttk.Scrollbar(master, orient = VERTICAL, command = self.canvas.yview)
        self.yscroll.grid(row = 2, column = 1, sticky = 'ns')

        self.canvas.config(xscrollcommand = self.xscroll.set, yscrollcommand = self.yscroll.set)
        self.canvas.bind("<Configure>", self.on_resize)


        self.option = ttk.Frame(master, height = 150, width = 1206)
        self.option.grid(row = 0, column = 0, sticky = 'we', columnspan = 5)

        self.addicon = PhotoImage(file = 'C:\\Users\\rain\\Desktop\\Fyosh!\\logo\\add.gif').subsample(2,2)
        self.btnAdd = ttk.Button(self.option, image = self.addicon, text = 'Add Crew', compound = TOP, command = self.add_crew)
        self.btnAdd.grid(row = 0, column = 0, padx = 50, pady = 5)

        self.updateicon = PhotoImage(file = 'C:\\Users\\rain\\Desktop\\Fyosh!\\logo\\update.gif').subsample(2,2)
        self.btnUpdate = ttk.Button(self.option, image = self.updateicon, text = 'Update Crew', compound = TOP)
        self.btnUpdate.grid(row = 0, column = 1, padx = 50)

        self.deleteicon = PhotoImage(file = 'C:\\Users\\rain\\Desktop\\Fyosh!\\logo\\delete.gif').subsample(2,2)
        self.btnDelete = ttk.Button(self.option, image = self.deleteicon, text = 'Delete Crew', compound = TOP)
        self.btnDelete.grid(row = 0, column = 2, padx = 50)

        self.reloadicon = PhotoImage(file = 'C:\\Users\\rain\\Desktop\\Fyosh!\\logo\\Refresh.png').subsample(7,7)
        self.reloadbtn = ttk.Button(self.option, image = self.reloadicon, command = self.callback_list, text = 'Load List', compound = TOP)
        self.reloadbtn.grid(row = 0, column = 3, padx = 50)

        self.tabframe = ttk.Frame(master, height = 20)
        self.tabframe.grid(row = 1, sticky = 'we')

        self.notebook = ttk.Notebook(self.tabframe)
        self.notebook.grid(row = 0, column = 0, sticky = 'we')

        db = mysql.connector.connect(user = 'root', password = '', host = 'localhost', database = 'fat2x_payroll')
        cursor = db.cursor()

        ships = ("SELECT * from tbl_shiplist")

        try:
            cursor.execute(ships)
            result = cursor.fetchall()
            self.tab = {}
            for row in result:
                self.tab[row[0]] = {
                    "shipname": ttk.Frame(self.notebook)
                    }
                self.notebook.add(self.tab[row[0]]["shipname"], text = row[1])
                db.close()

        except:
            messagebox.showinfo("alert", "ship list error")

        self.canvas.label = ttk.Label(self.canvas, text = "hahahahahha").grid(column = 0)
        self.canvas.label1 = ttk.Label(self.canvas, text = "hahahahahha").grid(column = 1)
        self.canvas.label2 = ttk.Label(self.canvas, text = "hahahahahha").grid(column = 2)
        self.canvas.label3 = ttk.Label(self.canvas, text = "hahahahahha").grid(column = 3)
        self.canvas.label4 = ttk.Label(self.canvas, text = "hahahahahha").grid(column = 4)
        self.canvas.label5 = ttk.Label(self.canvas, text = "hahahahahha").grid(column = 5)
        self.canvas.label6 = ttk.Label(self.canvas, text = "hahahahahha").grid(column = 6)
        self.canvas.label7 = ttk.Label(self.canvas, text = "hahahahahha").grid(column = 7)
        self.canvas.label8 = ttk.Label(self.canvas, text = "hahahahahha").grid(column = 8)

def start():
    master = Tk()
    master.geometry("1206x690+10+10")
    master.resizable(0,0)
    master.title("Crew Panel")
    canvasScroll = CanvasScroll(master)

if __name__ == "__main__":
    start()
布莱恩·奥克利(Bryan Oakley)

画布只能滚动嵌入在画布上的对象。对于小部件,这意味着您已经为要受滚动条影响的小部件调用了画布create_window方法。

如果要用于grid组织小部件,并且希望这些小部件位于可滚动容器中,通常的方法是将这些小部件放在框架中,然后使用create_window将框架添加到画布中。您可以在以下答案中看到此技术的示例:https : //stackoverflow.com/a/3092341/7432

至于自动调整大小,此行为与使用滚动条完全无关。如果在Widget上使用gridpack,则父对象将始终调整大小,除非您关闭了几何图形传播。不管是Canvas还是Frame或Toplevel或任何其他类的小部件都没有关系。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么画布在添加小部件时不使用滚动条滚动和自动调整大小?

来自分类Dev

画布上的Tkinter调整大小滚动条无法调整

来自分类Dev

画布上的Tkinter调整大小滚动条无法调整

来自分类Dev

相对于Tk()完美调整Text小部件的大小,以仅显示滚动条

来自分类Dev

如何在小部件中添加垂直滚动条?

来自分类Dev

在滚动条上添加阴影以调整滚动条头的大小

来自分类Dev

调整所包含图形的大小时,正确纠正FigureCanvasTkAgg画布小部件的滚动/调整大小行为

来自分类Dev

小部件中的ListView在滚动和调整大小时随机添加项目(嵌套的remoteviews)

来自分类Dev

使用滚动条调整框架中的列大小

来自分类Dev

Libgdx-小部件失去焦点时滚动窗格中的滚动条消失

来自分类Dev

滚动条在Tkinter中使用网格布局滚动文本小部件

来自分类Dev

如何使用一个滚动条滚动两个平行的文本小部件?

来自分类Dev

当容器和子项具有自动宽度时如何添加水平滚动条?

来自分类Dev

为什么边框会添加滚动条(溢出)?

来自分类Dev

无法在tkinter中将滚动条添加到文本小部件(其中包含多个框架)

来自分类Dev

将滚动条添加到Tkinter Entry或Text小部件

来自分类Dev

在Qt中将滚动条添加到小部件的最快,最好的方法

来自分类Dev

使用溢出时无法隐藏滚动条:自动

来自分类Dev

div溢出时如何自动使用滚动条

来自分类Dev

使用溢出时无法隐藏滚动条:自动

来自分类Dev

如何为画布大小更新Tkinter滚动条大小

来自分类Dev

Tkinter中消息小部件的滚动条

来自分类Dev

将Tkinter滚动条跳转到某个小部件

来自分类Dev

Tkinter中消息小部件的滚动条

来自分类Dev

Firefox滚动条不反映小部件主题选择

来自分类Dev

框架内的 Tkinter 滚动条小部件

来自分类Dev

如何禁用 TKinter 滚动条小部件?

来自分类Dev

当存在滚动条时,为什么我的clientWidth和offsetWidth值相同?

来自分类Dev

为什么在将 <html> 和 <body> 设置为 100% 时 JSFiddle 会显示滚动条

Related 相关文章

  1. 1

    为什么画布在添加小部件时不使用滚动条滚动和自动调整大小?

  2. 2

    画布上的Tkinter调整大小滚动条无法调整

  3. 3

    画布上的Tkinter调整大小滚动条无法调整

  4. 4

    相对于Tk()完美调整Text小部件的大小,以仅显示滚动条

  5. 5

    如何在小部件中添加垂直滚动条?

  6. 6

    在滚动条上添加阴影以调整滚动条头的大小

  7. 7

    调整所包含图形的大小时,正确纠正FigureCanvasTkAgg画布小部件的滚动/调整大小行为

  8. 8

    小部件中的ListView在滚动和调整大小时随机添加项目(嵌套的remoteviews)

  9. 9

    使用滚动条调整框架中的列大小

  10. 10

    Libgdx-小部件失去焦点时滚动窗格中的滚动条消失

  11. 11

    滚动条在Tkinter中使用网格布局滚动文本小部件

  12. 12

    如何使用一个滚动条滚动两个平行的文本小部件?

  13. 13

    当容器和子项具有自动宽度时如何添加水平滚动条?

  14. 14

    为什么边框会添加滚动条(溢出)?

  15. 15

    无法在tkinter中将滚动条添加到文本小部件(其中包含多个框架)

  16. 16

    将滚动条添加到Tkinter Entry或Text小部件

  17. 17

    在Qt中将滚动条添加到小部件的最快,最好的方法

  18. 18

    使用溢出时无法隐藏滚动条:自动

  19. 19

    div溢出时如何自动使用滚动条

  20. 20

    使用溢出时无法隐藏滚动条:自动

  21. 21

    如何为画布大小更新Tkinter滚动条大小

  22. 22

    Tkinter中消息小部件的滚动条

  23. 23

    将Tkinter滚动条跳转到某个小部件

  24. 24

    Tkinter中消息小部件的滚动条

  25. 25

    Firefox滚动条不反映小部件主题选择

  26. 26

    框架内的 Tkinter 滚动条小部件

  27. 27

    如何禁用 TKinter 滚动条小部件?

  28. 28

    当存在滚动条时,为什么我的clientWidth和offsetWidth值相同?

  29. 29

    为什么在将 <html> 和 <body> 设置为 100% 时 JSFiddle 会显示滚动条

热门标签

归档