代码之家  ›  专栏  ›  技术社区  ›  Smithy

Tkinter最佳按钮文本翻转方法

  •  0
  • Smithy  · 技术社区  · 7 年前

    因此,我正在从事一个tkinter项目,我遇到的一个问题是如何垂直翻转/旋转按钮对象的文本。我可以欺骗的一种方法是将画布对象放在按钮的顶部,最后绘制画布(如下所示),但是否有更干净的方法来实现这一点,只需操纵按钮对象属性?

    from tkinter import*
    root = Tk()
    windowDimensions = (1300,600)
    root.title("Mapper")
    
    
    root.geometry(str(windowDimensions[0])+"x"+str(windowDimensions[1]))
    
    button1=Button(root,text='',width=2,height=9)
    button1.place(x=0,y=20)
    can = Canvas(root,width=15,height=80)
    can.place(x=2,y=30)
    can.create_text(0, 80, anchor="nw", angle=90,text='hello',font=("Purisa", 12))
    
    root.mainloop()
    

    编辑:这样做的一个问题是,画布位于按钮上的任何位置,都会阻碍单击画布所在位置的能力。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Novel    7 年前

    您最好的选择(这不是一个很好的选择)是截屏按钮,在图像编辑器中旋转它,然后在按钮中使用该图像而不是文本。

    from tkinter import*
    root = Tk()
    
    # .gif file encoded as base64
    vert_button_data = '''
    R0lGODlhDQBCAKUkAAAAAAAANgAAYDYAADYANjYAYGAAAGAANmAAYAA2hzY2h4c2AGA2h4c2NgBg
    qzZghzZgq2BgNqtgAKtgNjaHhzaHzmCHh6uHNs6HNmCr8PCrYIfOq4fO8PDOh6vwq6vw8M7w8PDw
    q/DwzvDw8P//////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////ywAAAAADQBCAAAG/sCRcEgsGo+cpFJJ
    PDgPAWeUGKpSMFUM5Qggdo2DDAiU+RY7BoXCoDmOQp1OqLisN5/4A7XqqfqPAm5EERVLRwcGeEd+
    f0gZGR9uGQQSEgUcXB1CHQFcXkdhHx8ZA0doBQUGmotxc0QOhZFuGhgNCLAcskUiIbQNAg5HHxwV
    DwYSRMQQCBMYckUHAxYbIG5wtQwOGRzVRrwaFwEJRiAcGQ4KCxhE5woNEhodIkXw8oL3+Pn35pCS
    lJaYjABYxcnTEDNEQo0qZeRUqlVG4DxLVofJkDyKhjDaSLFiQCEYn+zZWEVYhWAjUBYRoOELwoMj
    XILiAOBDBYZnoj201oqOIMePI/BEEanRDwBGbl4avKdUyBIAhi4+SURUCMlG+oIAADs=
    '''
    
    windowDimensions = (1300,600)
    root.title("Mapper")
    root.geometry("{}x{}".format(*windowDimensions))
    button1_image = PhotoImage(data=vert_button_data)
    button1=Button(root,image=button1_image)
    button1.place(x=0,y=20)
    root.mainloop()
    

    您将丢失悬停动画,但同样可以使用图像重新创建悬停动画。

    从获取base64编码的数据。gif您可以使用:

    import codecs
    with open('export.gif', 'rb') as f:
        print(codecs.encode(f.read(), 'base64').decode())