主界面及应用说明

作者:侯展意

主界面代码说明

源码位置及继承关系

  • 主界面类指定义在pmappmodern.pyMainWindow
  • 继承自 pyminer_new.ui.generalwidgets.BaseMainWindow

    界面功能

  • 具有若干可自由拖动的停靠窗口,并可以记忆窗口的布局。
  • 具有若干可通过选项卡切换的工具栏。

    工具栏

    工具栏操作

  • 添加工具栏
    主界面的工具栏使用的是PMToolBar这个类,继承自QToolBar
    主窗口add_tool_bar()方法,可以将QToolBarPMToolBar,抑或是你自己的继承于QToolBar的工具栏添加到主窗口。

  • 获取工具栏 工具栏通过它的名称进行访问。预定义的工具栏只有一个,名曰'toolbar_home'
    举个例子讲,要获取主页对应的工具栏,那么就使用 MainWindow.toolbars.get('toolbar_home')进行获取就可以了。

  • 在工具栏上添加按钮
    获取工具栏后,调用MainWindow.add_tool_button()即可添加一个按钮,或者调用add_tool_buttons()添加多个竖排的按钮。这两个函数的返回值分别为QPushButton 和List[QPushButton]

  • 在工具栏上添加控件
    添加控件的方法与在QToolBar上添加控件完全相同,亦即继承了addWidget方法,在此不再赘述。

  • 添加带有菜单的按钮
    如果需要菜单效果,可以用QMenu写一个菜单,然后添加到按钮之上。

工具栏实现细节

工具栏看似使用了选项卡,其实不然。最顶端的“选项卡样控件”实为插入了按钮的QToolBar,可以依靠其按钮的点击来进行工具栏的切换。

切换工具栏时,其他工具栏隐藏,只有按钮对应的工具栏可以显示。详见switch_toolbar方法。

主界面停靠窗口

主界面由一系列PMDockWidget组成。此控件继承于QDockWidget

操作方法

  • 添加停靠窗口的方法 MainWindow.add_widget_on_dock()方法可以用来将任意控件添加到dock,而且下次加载之时布局会被保存。
  • 停靠窗口的获取 MainWindow.get_dock_widget(widget_name:str)->PMDockWidget
    根据名称进行停靠窗口的获取。如果名称不存在,那么就会抛出异常。

    一些说明

  • 加速启动:
    为了加快软件启动速度,控件(假设其类名为Widget)可以定义方法Widget.setup_ui。当加载时,首先执行控件的init,并且将setupui压入任务栈之中,等到主 界面显示出来之后再用定时器调用执行控件的setupui方法。对于核心控件可以定义show_directly=True,保证立即执行setup_ui方法。或者干脆不写 setup_ui方法,而是将启动方法放在__init之中。

  • 窗口实例 当dockwidget

  • 窗口隐藏与销毁
    当dockwidget的隐藏与显示可以通过主页选项卡中’视图‘菜单进行管理。当点击窗口关闭按钮的时候,窗口会被“关闭”。但实际上窗口并未被销毁,也是被 隐藏起来了。如果确实要销毁窗口,那么请重写PMDockWidget中的closeEvent方法,确保窗口在被关闭的时候被正确销毁了。

  • 对于工具栏基类的建议
    无论是主界面还是插件,建议继承PMToolBar类,这个类有设置好的样式。使用QToolbar尽管不会出错,但是样式很难统一。

    1. from pyminer.ui.generalwidgets import PMToolBar

主界面的全局获取方法

在pyminer.pmutil.py中定义了关于主界面的一些全局操作。 其中

  • 获取主界面
    get_main_window()->MainWindow
    主界面是一个全局变量,应用启动时对其赋值。这种写法尽管原始,但主要目的在于尽可能的减少循环导入的可能性,方便未来的插件开发。

  • 获取根路径 get_root_path()->str