首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Figurecanvaskivyagg自动适应MDBoxLayout?

如何使Figurecanvaskivyagg自动适应MDBoxLayout?
EN

Stack Overflow用户
提问于 2021-12-09 02:29:00
回答 1查看 176关注 0票数 0

我试着用基维的显示海图。有时候这个数字不适合MDBoxLayout。我检查了FigureCanvasKivyAgg和MDBoxLayout的尺寸。但在MDBoxLayout中,这个数字并没有被裁剪。是否有一种方法可以使绘图自动适应MDBoxLayout?提前谢谢。

平台: Windows 10 Python版本: 3.7必需的包:

代码语言:javascript
复制
certifi==2021.10.8
charset-normalizer==2.0.9
cycler==0.11.0
docutils==0.18.1
fonttools==4.28.3
idna==3.3
Kivy==2.0.0
kivy-deps.angle==0.3.0
kivy-deps.glew==0.3.0
kivy-deps.sdl2==0.3.1
Kivy-Garden==0.1.4
kivymd==0.104.2
kiwisolver==1.3.2
matplotlib==3.1.1
numpy==1.21.4
packaging==21.3
pandas==1.3.4
Pillow==8.4.0
Pygments==2.10.0
pyparsing==3.0.6
pypiwin32==223
python-dateutil==2.8.2
pytz==2021.3
pywin32==302
requests==2.26.0
scipy==1.7.3
seaborn==0.11.2
setuptools-scm==6.3.2
six==1.16.0
tomli==1.2.2
urllib3==1.26.7

Python代码:

代码语言:javascript
复制
import logging

from kivymd.app import MDApp
from kivy.lang import Builder
import seaborn as sns
from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
from kivymd.uix.tab import MDTabsBase
from kivymd.uix.floatlayout import MDFloatLayout


class Tab(MDFloatLayout, MDTabsBase):
    '''Class implementing content for a tab.'''
    #content_text = StringProperty("")

class MainApp(MDApp):
    def __init__(self, **kwargs):
        super(MainApp, self).__init__(**kwargs)
        self.kv = Builder.load_string('''
#CustomTab@FloatLayout+MDTabsBase:
#    
Screen: 
    MDTabs:
        Tab:
            title: "Tab 2"
            content_text: f"This is an example text for {self.title}"
                
            ScrollView:
                do_scroll_y: True
                MDGridLayout:
                    cols: 2
                    spacing: "10dp"
                    MDBoxLayout:
                        id: xxx
                        MDRaisedButton:
                            id: button4read_mtx
                            text: "Draw"
                            opposite_colors: True
                            on_release: app.plot_violin()
                            disabled: False
                        MDRaisedButton:
                            id: button4size
                            text: "Size"
                            opposite_colors: True
                            on_release: app.print_size()
                            disabled: False
                    MDBoxLayout:
                        size_hint: (0.5, None)
                        height: self.size[0]
                        id: mdbl4plot
                        orientation: "vertical"
                        #size_hint: (1,3)
                        #height: "400dp"
                        id: mdbl4plot
        Tab:
            title: "Tab 2"
''')

    def build(self):
        return self.kv
    def plot_violin(self):
        self.root.ids.mdbl4plot.clear_widgets()
        sns.set_theme(style="whitegrid")
        tips = sns.load_dataset("tips")
        ax = sns.violinplot(x="day", y="total_bill", data=tips)
        ax.figure.set_figheight(1)
        ax.figure.set_figwidth(1)
        #ax.set_autoscale_on(True)
        ax.autoscale(tight=True)
        figagg=FigureCanvasKivyAgg(ax.figure)
        print(figagg)
        #print(dir(figagg))
        logging.info("figagg size: "+str(figagg.size))
        print(figagg.size_hint)
        logging.info("mdbl4plot size: "+str(self.root.ids.mdbl4plot.size))
        self.root.ids.mdbl4plot.add_widget(figagg)
    def print_size(self):
        print("mdbl4plot size" + str(self.root.ids.mdbl4plot.size))

if __name__ == '__main__':
    MainApp().run()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-10 17:52:35

matplotlibFigureCanvasKivyAgg中似乎都是一个bug,但是您可以通过使用tight_layout()方法来解决它。试着替换这两行:

代码语言:javascript
复制
    ax.figure.set_figheight(1)
    ax.figure.set_figwidth(1)

通过以下方式:

代码语言:javascript
复制
    ax.figure.tight_layout(pad=5)

经过反复试验,我得到了一个pad5

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70284042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档