精华内容
下载资源
问答
  • QComboBox下拉框给选项增加删除按钮

    千次阅读 2020-06-04 22:22:32
    网上有不少 Qt 实现的例子,实现方式也很多,在参照了别人的思路后我也实现了选项按钮的下拉框。中间遇到不少坑,最后效果也不完美。 1.实现过程 我选的是 QListWidget +QListWidgetItem 的方式,因为感觉相对...

    0.前言

    给下拉框增加按钮是常见的功能,如 QQ 账号输入框的下拉:

    网上有不少 Qt 实现的例子,实现方式也很多,在参照了别人的思路后我也实现了选项带按钮的下拉框。中间遇到不少坑,最后效果也不完美。

    1.实现过程

    我选的是 QListWidget + QListWidgetItem 的方式,因为感觉相对简单点,而且和样式表更好搭配。这种方式主要是把 QListWidget作为 QComboBox 的 View ,List 的 model 也设置为 QComboBox 的 model,这样展现出来的选项就是一个 QListWidgetItem,我们只需要把按钮设置到 QListWidgetItem 的 widget 中就行了。

    这里面还有个问题是, 要让 QComboBox 读取到对应项的文本,还要给 QListWidgetItem 加一句这个:

    QListWidgetItem* item_widget = new QListWidgetItem();
    //设置显示的data,这样combox才有文字
    item_widget->setData(Qt::DisplayRole,"text");

    然后来看一下比较简单的实现:

        QListWidget *item_list=new QListWidget(this);
        ui->comboBoxA->setModel(item_list->model());
        ui->comboBoxA->setView(item_list);
    
        //添加选项
        for(int i=0;i<5;i++)
        {
            //组合一个带按钮的widget
            QWidget *item_widget=new QWidget();
            QHBoxLayout *layout=new QHBoxLayout(item_widget);
            layout->addStretch(); //弹簧
            QPushButton *btn=new QPushButton(item_widget);
            layout->addWidget(btn);
            layout->setMargin(0);
            layout->setSpacing(0);
    
            QListWidgetItem* item_wrap = new QListWidgetItem(item_list);
            //测试长文字
            QString text=(i==0)?"text long long long":"text";
            //设置显示的data,这样combox才有文字
            item_wrap->setData(Qt::DisplayRole,text);
            item_list->setItemWidget(item_wrap,item_widget);
    
            connect(btn,&QPushButton::clicked,this,[=](){
                ui->comboBoxA->hidePopup(); //没有刷新弹框大小
                item_list->takeItem(item_list->row(item_wrap));
                delete item_wrap;
            });
        }

    很快就发现了问题,文字足够长时,选项整体宽度被拉长了,导致按钮位置超出了显示范围(下图蓝色框部分):

     

    (按钮位置我是配合样式表的 margin 调整的,可见源代码) 

    索性我就继承了 QListWidget,重写了他的 visualRect 接口,在有滚动条时,rect 就去掉滚动条的宽度:

    QRect ComboView::visualRect(const QModelIndex &index) const
    {
        QRect rect=QListWidget::visualRect(index);
        int width=this->width();
        if(verticalScrollBar()->isVisible()){
            width-=verticalScrollBar()->width();
        }
        rect.setWidth(width);
        return rect;
    }

    这下就能把选项挤过来了:

     

    这里还有个滚动条占位得问题没解决,我的想法是显示或增删选项时去判断是否有滚动条,然后调整按钮的 margin。

    2.完整代码

    github 链接:https://github.com/gongjianbo/MyTestCode/tree/master/Qt/MyComboBox

    主要实现(比较忙, demo 没怎么写注释):

    #ifndef MYCOMBOBOX_H
    #define MYCOMBOBOX_H
    
    #include <QComboBox>
    #include <QListView>
    #include <QListWidget>
    #include <QPushButton>
    #include <QLayout>
    #include <QStyledItemDelegate>
    
    class ComboView : public QListWidget
    {
        Q_OBJECT
    public:
        explicit ComboView(QWidget * parent=nullptr);
    
        QRect visualRect(const QModelIndex &index) const override;
    };
    
    class ComboItem : public QWidget
    {
        Q_OBJECT
    public:
        explicit ComboItem(const QString &text,QWidget *parent = nullptr);
        ~ComboItem();
        QString text() const;
    
    signals:
        void itemClicked(const QString &text);
    
    private:
        QString textValue;
        QPushButton *btn;
    };
    
    class MyComboBox : public QComboBox
    {
        Q_OBJECT
    public:
        explicit MyComboBox(QWidget *parent = nullptr);
    
        void setRemovableItems(const QStringList &items);
    
    signals:
        void itemRemoved(const QString &text);
    
    private:
        QListWidget *itemList;
    };
    
    #endif // MYCOMBOBOX_H
    
    #include "MyComboBox.h"
    
    #include <QMouseEvent>
    #include <QLineEdit>
    #include <QStyleOptionViewItem>
    #include <QStyle>
    #include <QScrollBar>
    
    #include <QDebug>
    
    ComboView::ComboView(QWidget *parent)
        : QListWidget(parent)
    {
    
    }
    
    QRect ComboView::visualRect(const QModelIndex &index) const
    {
        QRect rect=QListWidget::visualRect(index);
        int width=this->width();
        if(verticalScrollBar()->isVisible()){
            width-=verticalScrollBar()->width();
        }
        rect.setWidth(width);
        return rect;
    }
    
    ComboItem::ComboItem(const QString &text, QWidget *parent)
        : QWidget(parent),
          textValue(text),
          btn(new QPushButton(this))
    {
        QHBoxLayout *layout=new QHBoxLayout(this);
        layout->addStretch();
        layout->addWidget(btn);
        layout->setMargin(0);
        layout->setSpacing(0);
    
        connect(btn,&QPushButton::clicked,[this]{
            emit itemClicked(textValue);
        });
    }
    
    ComboItem::~ComboItem()
    {
        qDebug()<<"~delete"<<textValue;
    }
    
    QString ComboItem::text() const
    {
        return textValue;
    }
    
    MyComboBox::MyComboBox(QWidget *parent)
        : QComboBox(parent),
          itemList(new ComboView(this))
    {
        //itemList->setTextElideMode(Qt::ElideNone);
        setModel(itemList->model());
        setView(itemList);
    }
    
    void MyComboBox::setRemovableItems(const QStringList &items)
    {
        //combox的additem insertitem不是虚函数
        //实现里时调用的model->insertRow,但是懒得再去重写listmodel-view,就新增一个接口
        itemList->clear();
        if(items.isEmpty())
            return;
    
        for(int i=0;i<items.count();i++)
        {
            QListWidgetItem* widget_item = new QListWidgetItem(itemList);
            ComboItem *item=new ComboItem(items.at(i),itemList);
            widget_item->setData(Qt::DisplayRole,items.at(i));
            //widget_item->setData(Qt::TextAlignmentRole,int(Qt::AlignRight|Qt::AlignVCenter));
            itemList->setItemWidget(widget_item,item);
    
            connect(item,&ComboItem::itemClicked,this,[this,item,widget_item](){
                //take移除item后没有刷新弹框大小,干脆隐藏掉先
                hidePopup();
    
                itemList->takeItem(itemList->row(widget_item));
                delete widget_item;
                emit itemRemoved(item->text());
            });
        }
    }
    
    

     

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    #include "MyComboBox.h"
    
    #include <QListWidget>
    #include <QDebug>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        //【1】 ui上的QComboBox
        QListWidget *item_list=new QListWidget(this);
        ui->comboBoxA->setModel(item_list->model());
        ui->comboBoxA->setView(item_list);
    
        //添加选项
        for(int i=0;i<5;i++)
        {
            //组合一个带按钮的widget
            QWidget *item_widget=new QWidget();
            QHBoxLayout *layout=new QHBoxLayout(item_widget);
            layout->addStretch(); //弹簧
            QPushButton *btn=new QPushButton(item_widget);
            layout->addWidget(btn);
            layout->setMargin(0);
            layout->setSpacing(0);
    
            QListWidgetItem* item_wrap = new QListWidgetItem(item_list);
            //测试长文字
            QString text=(i==0)?"text long long long":"text";
            //设置显示的data,这样combox才有文字
            item_wrap->setData(Qt::DisplayRole,text);
            item_list->setItemWidget(item_wrap,item_widget);
    
            connect(btn,&QPushButton::clicked,this,[=](){
                ui->comboBoxA->hidePopup(); //没有刷新弹框大小
                item_list->takeItem(item_list->row(item_wrap));
                delete item_wrap;
            });
        }
    
    
        //【2】ui上的combobox提升为自定义子类
        QStringList str_list{
            "1234567891011+++++++++++++",
            "2234567891011",
            "323",
            "423",
            "523",
            "623",
            "723",
            "823",
            "123",
            "123",
            "123"
        };
        ui->comboBoxB->setRemovableItems(str_list);
        //ui->comboBoxB->setMaxVisibleItems(20);
    
        connect(ui->comboBoxB,&MyComboBox::itemRemoved,this,[=](const QString &text){
            qDebug()<<"item remove"<<text;
            //ui->comboBox_2->clear();
        });
    }
    
    /*下拉框*/
    QComboBox{
    min-width:1px;
    min-height:26px;
    padding-left: 5px;
    padding-right: 2px;
    color: white;
    border:1px solid rgb(128, 128, 128);
    background-color:  rgb(100 ,100 ,100);
    }
    QComboBox:on{
    /*弹出为on*/
    }
    QComboBox:hover{
    border:1px solid rgb(255, 170, 0);
    }
    QComboBox:disabled{
    color: rgb(230, 230, 230);
    background-color:rgb(150, 150, 150);
    }
    QComboBox:editable{
    background-color:rgb(100, 100, 100);
    }
    QComboBox:editable:disabled{
    background-color:rgb(150, 150, 150);
    }
    /*下拉按钮-配合贴图*/
    QComboBox::drop-down{
    min-width:24px;
    }
    /*下拉框弹出项*/
    QComboBox QAbstractItemView{
    font: 15px "宋体";
    background-color:rgb(110, 110, 110);
    }
    QComboBox QAbstractItemView::item{
    height:24px;
    color:white;
    }
    QComboBox QAbstractItemView::item:hover{
    background-color: rgb(255, 170, 0);
    }
    QComboBox QAbstractItemView::item:selected{
    background-color: rgb(255, 170, 0);
    }
    /*按钮样式*/
    QComboBox QAbstractItemView QPushButton{
    max-width:20px;
    min-width:20px;
    max-height:20px;
    min-height:20px;
    border:0;
    margin-right:20px;
    background-color:white;
    }
    QComboBox QAbstractItemView QPushButton:hover{
    background-color:cyan;
    }

     3.参考

    博客:https://blog.csdn.net/wukai_std/article/details/60144318

    博客:http://blog.sina.com.cn/s/blog_a6fb6cc90102vces.html

    展开全文
  • 文章目录Radiobutton 选项按钮选项按钮的基本概念Checkbutton 复选框 Radiobutton 选项按钮 选项按钮的基本概念   选项按钮Radiobutton 名称的由来是无线电的按钮,在收音机时代可以用无线电的按钮选择特定频道。...

    Radiobutton 选项按钮

    选项按钮的基本概念

      选项按钮Radiobutton 名称的由来是无线电的按钮,在收音机时代可以用无线电的按钮选择特定频道。选项按钮最大的特色是可以用鼠标单击方式选取此选项,同时一次只能有一个选项被选取。最常见的方式是让选项按钮以文字方式存在,与标签一样,我们也可以设计含图像的选项按钮

      程序设计时可以设计让选项按钮与函数(或称方法)绑在一起,当选择适当的选项按钮时,可以自动执行相关的函数或方法

      语法格式:

    Radiobutton(父对象, options, ...)
    

    参数:

    • 第一个参数:父对象,表示这个选项按钮将建立在哪一个窗口内
    • 第二个参数:options,参数如下
    参数 含义
    activebackground 鼠标光标在选项按钮上时的背景颜色
    activeforeground 鼠标光标在选项按钮上时的前景颜色
    anchor 如果空间大于所需时,控制选项按钮的位置
    默认值是CENTER
    bitmap 位图图像对象
    borderwidth 边界宽度
    默认是两个像素
    bd 边界宽度
    默认是两个像素
    bg 标签背景或indicator的背景颜色
    command 单机功能按钮时,执行此方法
    cursor 当鼠标光标移至按钮上时的形状
    fg 文字前景色彩
    font 字形
    height 高,单位是字符高
    highlightbackground 当选项按钮获取焦点时的背景颜色
    highlightcolor 当选项按钮取得焦点时的颜色
    image 图像对象,如果要建立含图像的选项按钮时,可以使用此参数
    indicatoron 当此值为0时,可以建立盒子选项按钮
    justify 当有多行文字时,最后一行文字的对齐方式
    padx 可设置选项按钮与文字的间隔
    默认是1
    pady 可设置选项按钮的上下间距
    默认是1
    selectcolor 当选项按钮被选取时的颜色
    selectimage 如果设置图像选项按钮时,可由此设置当选项按钮被选取时的不同图像
    state 若设置为DISABLED,则以灰阶显示选项按钮,表示暂时无法使用
    默认是state=NORMAL
    text 选项按钮名称
    textvariable 以变量方式显示选项按钮文字
    underline 可以设置第几个文字有下划线
    从0开始计算,默认是-1,表示无下划线
    value 选项按钮的值,可以区分所选取的选项按钮
    variable 设置或取得目前选取的单选按钮,它的值类型通常是IntVar或StringVar
    width 选项按钮的文字有几个字符框,省略时会自动调整为实际宽度
    wraplength 限制每行的文字数
    默认是0,表示只有"\n"才会换行

    选项按钮的初步运用

    例子:运用IntVar

    import tkinter
    
    def show():
        # 获取var的值
        num = var.get()
        # 如果值为1,更改text值为"我是男生"
        if num == 1:
            label.config(text="我是男生")
        # 如果值为2,更改text值为"我是女生"
        else:
            label.config(text="我是女生")
    
    
    # 创建主窗口
    root = tkinter.Tk()
    # 整型对象
    var = tkinter.IntVar()
    # 设置默认选项为1, 在次相当于默认是男生
    var.set(1)
    
    label = tkinter.Label(root, text="这是预选,还未选择", bg="lightyellow", width=30)
    label.pack()
    
    # 创建男生选项按钮,值为1,点击此按钮自动调用show函数
    man = tkinter.Radiobutton(root, text="男生", variable=var, value=1, command=show)
    man.pack()
    # 创建女生选项按钮,值为2
    woman = tkinter.Radiobutton(root, text="女生", variable=var, value=2, command=show)
    woman.pack()
    
    root.mainloop()
    

    运行结果:
    在这里插入图片描述

    variablevalue绑定,通过get方法将所选选项的参数value的值传回,因为我们最开始设置默认是1,但是我们没有点击它,就没有触发show函数,故没有在开始就变为"我是男生"

    例子:更改方式,不用IntVar,用StringVar

    import tkinter
    
    def show():
        # 获取var的值
        label.config(text="我是"+var.get())
    
    
    # 创建主窗口
    root = tkinter.Tk()
    # 整型对象
    var = tkinter.StringVar()
    # 设置默认选项为1, 在次相当于默认是男生
    var.set("男生")
    
    label = tkinter.Label(root, text="这是预选,还未选择", bg="lightyellow", width=30)
    label.pack()
    
    # 创建男生选项按钮,值为1,点击此按钮自动调用show函数
    man = tkinter.Radiobutton(root, text="男生", variable=var, value="男生", command=show)
    man.pack()
    # 创建女生选项按钮,值为2
    woman = tkinter.Radiobutton(root, text="女生", variable=var, value="女生", command=show)
    woman.pack()
    
    root.mainloop()
    

    运行结果:
    跟第一种方式一样

    将字典应用在选项按钮上

    选项少好说,要是选项多了呢?这时候字典就很方便了

    例子

    import tkinter
    
    def show():
        # 获取var的值
        label.config(text="我是"+dict[var.get()])
    
    
    # 创建主窗口
    root = tkinter.Tk()
    var = tkinter.IntVar()
    var.set(0)
    
    dict = {0: "一年级", 1: "二年级", 2: "三年级", 3: "四年级", 4: "五年级", 5: "六年级"}
    
    label = tkinter.Label(root, text="这是预选,还未选择", bg="lightyellow", width=30)
    label.pack()
    
    for x, y in dict.items():
        tkinter.Radiobutton(root, text=y, variable=var, value=x, command=show).pack()
    
    root.mainloop()
    

    运行结果:
    在这里插入图片描述

    盒子选项按钮

    意思就是把小圆框变成盒子样式的选项按钮

    在Radiobutton方法内使用indicatoron参数,将他设为0,就可以把它变成盒子按钮

    例子

    import tkinter
    
    def show():
        # 获取var的值
        label.config(text="我是"+dict[var.get()])
    
    
    # 创建主窗口
    root = tkinter.Tk()
    var = tkinter.IntVar()
    var.set(0)
    
    dict = {0: "一年级", 1: "二年级", 2: "三年级", 3: "四年级", 4: "五年级", 5: "六年级"}
    
    label = tkinter.Label(root, text="这是预选,还未选择", bg="lightyellow", width=30)
    label.pack()
    
    for x, y in dict.items():
        tkinter.Radiobutton(root, text=y, variable=var, indicatoron=0, value=x, width=30, command=show).pack()
    
    root.mainloop()
    

    运行结果:
    在这里插入图片描述

    建立含图像的选项按钮

    也可以将选项文字用图像代替,用法跟标签Label相同

    例子

    import tkinter
    
    def show():
        # 获取var的值
        label.config(text="选择的是"+var.get())
    
    
    # 创建主窗口
    root = tkinter.Tk()
    
    # 加载帽子图像
    imgHat = tkinter.PhotoImage(file="1.png")
    # 加载袜子图像
    imgSocks = tkinter.PhotoImage(file="2.png")
    # 加载纸尿裤图像
    imgDiapers = tkinter.PhotoImage(file="3.png")
    
    var = tkinter.StringVar()
    var.set("帽子")
    
    label = tkinter.Label(root, text="这是预选,还未选择", bg="lightyellow", width=30)
    label.pack()
    
    Hat = tkinter.Radiobutton(root, image=imgHat, variable=var, value="帽子", command=show)
    Hat.pack()
    
    Socks = tkinter.Radiobutton(root, image=imgSocks, variable=var, value="袜子", command=show)
    Socks.pack()
    
    Diapers = tkinter.Radiobutton(root, image=imgDiapers, variable=var, value="纸尿裤", command=show)
    Diapers.pack()
    
    root.mainloop()
    

    运行结果:
    在这里插入图片描述
    另外,可以加上文字,增加text参数设置文字,增加compound参数设置图像与文字的位置

    例子

    Hat = tkinter.Radiobutton(root, text="帽子", image=imgHat, compound=tkinter.RIGHT, variable=var, value="帽子", command=show)
    Hat.pack()
    
    Socks = tkinter.Radiobutton(root, text="袜子", image=imgSocks, compound=tkinter.RIGHT, variable=var, value="袜子", command=show)
    Socks.pack()
    
    Diapers = tkinter.Radiobutton(root, text="纸尿裤", image=imgDiapers, compound=tkinter.RIGHT, variable=var, value="纸尿裤", command=show)
    Diapers.pack()
    

    运行结果:
    在这里插入图片描述

    Checkbutton 复选框

    Checkboxs 可以翻译为复选框,它在控件中的类别名称是Checkbutton

    复选框在屏幕上显示为一个方框,它与选项按钮最大的差别在于它是复选。在设计复选框时,最常见的方式是让复选框以文字形式存在,与标签一样,也可以设计含有图像的复选框

    程序设计时,可以设计让每个复选框与函数(或称方法)绑在一起,当此选项被选择时,可以自动执行相关的函数或方法

    可以使用Cheakbutton()方法建立复选框,语法格式如下:

    Cheakbutton(父对象, options, ...)
    

    参数:

    • 第一个参数:父对象,表示这个复选框按钮将建立在哪一个窗口内
    • 第二个参数:options,参数如下
    参数 含义
    activebackground 鼠标光标在复选框按钮上时的背景颜色
    activeforeground 鼠标光标在复选框按钮上时的前景颜色
    bitmap 位图图像对象
    borderwidth 边界宽度
    默认是两个像素
    bd 边界宽度
    默认是两个像素
    bg 标签背景或indicator的背景颜色
    command 当用户更改选项时,会自动执行此方法
    cursor 当鼠标光标移至复选框上时的形状
    disabledforeground 当无法操作时的颜色
    font 字形
    height 复选框中的文字有几行
    默认是一行
    highlightbackground 当复选框按钮获取焦点时的背景颜色
    highlightcolor 当复选框按钮取得焦点时的颜色
    image 图像对象,如果要建立含图像的选项按钮时,可以使用此参数
    justify 当有多行文字时,最后一行文字的对齐方式
    offvalue 这是控制变量默认,若复选框未选取值是0,可以由此更改设置此值
    onvalue 这是控制变量默认,若复选框未选取值是1,可以由此更改设置此值
    padx 可设置复选框按钮与文字的间隔
    默认是1
    pady 可设置复选框按钮的上下间距
    默认是1
    relief 可由此控制复选框外框
    默认是relief=FLAT
    selectcolor 当复选框按钮被选取时的颜色
    selectimage 如果设置图像复选框按钮时,可由此设置当复选框按钮被选取时的不同图像
    state 若设置为DISABLED,则以灰阶显示复选框按钮,表示暂时无法使用
    默认是state=NORMAL
    如果鼠标光标在复选框上方表示ACTIVE
    text 复选框旁的文字
    underline 可以设置第几个文字有下划线
    从0开始计算,默认是-1,表示无下划线
    variable 设置或取得目前选取的复选框,它的值类型通常是IntVar或StringVar
    width 复选框按钮的文字有几个字符框,省略时会自动调整为实际宽度
    wraplength 限制每行的文字数
    默认是0,表示只有"\n"才会换行

    复选框的初步运用

    例子

    import tkinter
    
    # 创建主窗口
    root = tkinter.Tk()
    
    label = tkinter.Label(root, text="请选择最喜欢的食物", bg="lightyellow", fg="red", width=30)
    label.grid(row=0)
    
    varOne = tkinter.IntVar()
    cbutOne = tkinter.Checkbutton(root, text="饺子", variable=varOne)
    cbutOne.grid(row=1, sticky=tkinter.W)
    
    varTwo = tkinter.IntVar()
    cbutTwo = tkinter.Checkbutton(root, text="春卷", variable=varTwo)
    cbutTwo.grid(row=2, sticky=tkinter.W)
    
    varThree = tkinter.IntVar()
    cbutThree = tkinter.Checkbutton(root, text="汤圆", variable=varThree)
    cbutThree.grid(row=3, sticky=tkinter.W)
    
    root.mainloop()
    

    运行结果:
    在这里插入图片描述
    例子:运用字典的形式

    import tkinter
    
    def send():
        x = ""
        for j in cheakboxs:
            # 这里实际上是cheakboxs[j].get() == True
            # 如果被勾选的话传回来的值为True
            # 如果没有被勾选的话传回来的值为False
            if cheakboxs[j].get():
                x = x +foods[j] + "\n"
        print(x)
    
    
    # 创建主窗口
    root = tkinter.Tk()
    
    label = tkinter.Label(root, text="请选择最喜欢的食物", bg="lightyellow", fg="red", width=30)
    label.grid(row=0)
    
    foods = {0: "饺子", 1: "春卷", 2: "汤圆", 3: "混沌", 4: "热干面"}
    # 这里负责给予字典的键一个False或者True的值,用于检测是否被勾选
    cheakboxs = {}
    for i in range(len(foods)):
        # 这里相当于是{0: False, 1: False, 2: False, 3: False, 4: False}
        cheakboxs[i] = tkinter.BooleanVar()
        # 只有被勾选才变为True
        tkinter.Checkbutton(root, text=foods[i], variable=cheakboxs[i]).grid(row=i + 1, sticky=tkinter.W)
    
    buttonOne = tkinter.Button(root, text="提交", width=10, command=send)
    buttonOne.grid(row=len(foods) + 1)
    
    root.mainloop()
    

    运行结果:
    在这里插入图片描述

    简单编辑程序的应用

    混用文本框,功能按钮,复选框

    例子

    import tkinter
    
    def selectAll():
        # select_range 选择的范围
        entry.select_range(0, "end")
    
    def selectDel():
        # 清空选择的文字
        entry.select_clear()
    
    def clear():
        # 删除所有
        entry.delete(0, "end")
    
    def readOnly():
        if var.get():
            # 以灰阶显示复选框,表示暂时无法使用
            entry.config(state=tkinter.DISABLED)
        else:
            entry.config(state=tkinter.NORMAL)
    
    
    
    # 创建主窗口
    root = tkinter.Tk()
    
    # row=0 建立Entry文本框
    entry = tkinter.Entry(root, width=30)
    entry.grid(row=0, column=0, columnspan=4, padx=5, pady=5, sticky=tkinter.W)
    
    # row=1 建立按钮
    butOne = tkinter.Button(root, text="全选", command=selectAll)
    butOne.grid(row=1, column=0, padx=5, pady=5, sticky=tkinter.W)
    
    butTwo = tkinter.Button(root, text="取消全选", command=selectDel)
    butTwo.grid(row=1, column=1, padx=5, pady=5, sticky=tkinter.W)
    
    butThree = tkinter.Button(root, text="删除", command=clear)
    butThree.grid(row=1, column=2, padx=5, pady=5, sticky=tkinter.W)
    
    butFour = tkinter.Button(root, text="退出", command=root.destroy)
    butFour.grid(row=1, column=3, padx=5, pady=5, sticky=tkinter.W)
    
    # row=2 复选框
    var = tkinter.BooleanVar()
    var.set(False)
    cheakReadOnly = tkinter.Checkbutton(root, text="只读", variable=var, command=readOnly)
    cheakReadOnly.grid(row=2, column=0)
    
    root.mainloop()
    

    运行结果:
    在这里插入图片描述

    谢谢观看,笔者会持续更新,如有错误或者建议,请私信我

    展开全文
  • easyui combobox添加清除选项按钮

    千次阅读 2017-03-09 16:18:28
    data-options=" icons:[{ iconCls:'icon-clear',

    <input class="easyui-combobox" name="appType"
    data-options="
    icons:[{
    iconCls:'icon-clear',
    handler: function(e){
    $(e.data.target).combobox('clear');
    }
    }],
    value:'',
    valueField:'appId',
    textField:'appName',
    panelHeight:'auto'
    url:'getAppTypeList.do'"/>

    展开全文
  • 做一套问卷调查系统的后台 添加问题和答案 如图![图片说明]... 请问大神怎么用 easyui 实现 在下边添加一个 增加选项按钮 点击然后多出一个 新增答案选项的框 填入答案?
  • EBS FORM 菜单栏增加选项

    千次阅读 2013-09-13 10:23:59
    EBS Form菜单栏增加选项 发表于 2012 年 3 月 29 日 由 xue.xu 现象一:在菜单栏的【工具】下增加选项 方法: 1.在Form级触发器When-New-Form-Instance添加选项初始化 Form级app_special.instantiate...

    EBS Form菜单栏增加选项

    现象一:在菜单栏的【工具】下增加选项


    方法:
    1.在Form级触发器When-New-Form-Instance添加选项初始化
    Form级app_special.instantiate(‘SPECIAL1′,’<Prompt>’);
    2.在Block级触发器Pre_Block中添加启用选项
    app_special.enable(‘SPECIAL1′,property_on);
    3.在Forms级上添加选项对应触发器SPECIAL1
    在Form级上写选项的实际操作代码。

    现象二:在菜单栏增加【活动】菜单并在其下增加选项


    方法:(以RCVRCVRC.fmb为例)
    1.在CUSTOM.pll中添加如下处理,当form为RCVRCVRC.fmb时,则同时加载CRCVRCVRC.pll,且监听各触发器事件

    2.添加CRCVRCVRC.pll


    3.在package body中首先监听RCVRCVRC.fmb的WHEN-NEW-ITEM-INSTANCE触发器
    if (event_name = ‘WHEN-NEW-ITEM-INSTANCE’) then
    –添加菜单
    app_special2.instantiate(option_name => ‘SPECIAL44′, –添加自定义触发器事件
    hint => ‘按类型数量汇总’, –新增选项名称
    icon => null,
    initially_enabled => false,
    separator => null);
    end if;
    4.在package body增加监听自定义触发器事件SPECIAL44,并书写该事件所做的处理
    if event_name = ‘SPECIAL44′ then
    –书写该触发器所做的处理操作
    –调用FORM
    app_navigate.execute(function_name => ‘RCVTXNSUM’,
    open_flag => ‘C’,
    session_flag => ‘Y’,
    other_params => ‘RECEIPT_NUM = “‘ || v_receipt_num || ‘”‘ ||
    ‘shipment_header_id = “‘ ||
    v_shipment_header_id || ‘”‘ ||
    ‘user_id = “‘ || v_user_id || ‘”‘ ||
    ‘org_id = “‘ || v_org_id || ‘”‘);
    end if;
    5.上传编译pll,将上述pll文件上传至$AU_TOP/resource下,然后使用f60gen进行编译
    f60gen userid=apps/apps module=$AU_TOP/resource/xxx.pll output_file=$AU_TOP/resource/xxx.plx module_type=library

    展开全文
  • 添加按钮跑天上去了,所以我就基于原本功能做了一些优化以实现我想要的结果 1.首先在循环的el-tab-pane下面单独添加一个el-tab-pane,并取一个特别的名字,我叫add <el-tabs v-model="editableTabsValue" type...
  • 选择屏幕上增加自定义按钮

    千次阅读 2017-05-05 11:45:28
    sap的选择屏幕的标准工具栏上系统预先定义了5个按钮,他们对应的功能码是FC01-FC05,默认是不激活的。用户可以使用SELECTION-SCREEN FUNCTION KEY i.来激活这5个按钮(这里的i必须是1-5),这五个按钮的文本放在...
  • django xadmin隐藏顶部“增加按钮

    万次阅读 2019-11-12 09:56:19
    有时候不想要这个增加按钮,方法如下 找到xadmin库的目录,然后依次templates/xadmin/blocks/comm.top.topnav.html,打开这个文件。 大概在21行左右,找到这几行 {% if add_models %} <li class="dropdown g-add...
  • c#中给tabpage增加关闭按钮

    千次阅读 2017-08-05 15:11:32
    要实现这个功能,我们分两步来走,首先是需要绘制这个按钮,然后再对这个按钮的事件作出响应 1、将tabcontrol的绘制模式属性修改为OwnerDrawFixed,这样我们才能对DrawItem事件进行重写 DrawItem绘制标题前将我们...
  • 背景 本人前端是一塌糊涂,这几年没怎么搞过前端,因为有需要,所以用了...在最后1列增加扣费和充值2个按钮。 这个列表用的是DataTable。 在网上搜了几篇解决方案,千篇一律,我也就没试可行不,不符合我...
  • 但没有右边X按钮清除功能,所以只能自己添加,网上很多都是自定义一个,对于已经加入AutoCompleteTextView 的同学,更换也很麻烦,其实只需要java代码设置一下也可以实现,逻辑不太完善的多包涵。 直接上图: priva
  • ![图片说明](https://img-ask.csdn.net/upload/201701/04/1483514838_561672.png) tab选项卡本身可以自己切换,但是希望同时也能用button按钮进行切换,怎么做到呢?
  • H+框架 通过按钮新增选项卡功能

    千次阅读 热门讨论 2018-05-19 13:27:19
    前段时间本人做项目时刚好遇到新的需求,需要通过页面按钮创建新的选项卡展示页面,很遗憾,源框架没有提供此功能,后来查了一些资料,网上资源说法也不一,只能自己去探索源码方法,找到js/contabs.js文件进行扩展...
  • 在本篇教程中,我们将在窗体中增加1个命令按钮(PushButton),并增加ToolTip对象,对PushButton的功能进行提示。在这里提示大家一下,教程所给程序的难度是慢慢增加的,而且例程和例程之间是有关联的,我们在学习新...
  • easyui 为所有的 combobox增加清除按钮

    千次阅读 2016-11-11 04:04:36
    将以下js代码加入到页面,注意要在easyui的库(一般是jquery.easyui.min.js)之后加入 $.fn.combobox.defaults.icons=[{  iconCls:'icon-clear',  handler:function(e){  //alert($(e.handleObj.data.target)....
  • '2 步长(每点击两边按钮和滑块增加或减少的步长) 'largechange属性,只用于滚动条,点击一次中间增加或减少的数 'smallchange属性,点击一次按变化的数 '二 事件 Private Sub ScrollBar1_Change() TextBox1....
  • QT Dialog增加最大最小按钮

    千次阅读 2017-04-01 10:57:59
    QT 添加最大最小化,关闭选项
  • 如题 vs2010中创建mfc ,选项卡式文档,如何在COutputWnd类视图中添加CMFCButton按钮 已经添加了一个CMFCTabCtrl 想在这个后面添加一个CMFCButton按钮 ,求解决
  • layui iframe中按钮添加父页面选项

    千次阅读 2018-11-19 19:17:45
    layui.use(‘element’,function () { var element=layui.element; parent.layui.element.tabAdd(’… 然后向不同iframe传值可以用parent.json储存并相互传递
  • 这个是按钮的函数,在CPage2里定义了CString strarray[ ],m_kind是组合框控件的控制变量,m_akind是编辑框里面的值变量,点击按钮后在组合框控件中有新添加的选项,但是重新运行后就没有新添加的选项了,新手向大神...
  • JFrame基本操作,增加选择文件按钮

    千次阅读 2016-04-20 09:38:45
    //继承JFrame,将该对象变成面板,实现ActionListener实现按钮监听 public class Frame extends JFrame implements ActionListener{ //窗口 JFrame jf = new JFrame("王狗蛋的小助手"); //画板 JPanel jp = ...
  • &lt;div&gt; &lt;div&gt; &lt;el-select class="el-select" v-model="form.label" placeholder="全部" clearable filterable&...item in addList&qu
  • 功能需求,在下拉选项框内,追加一个添加的按钮,点击可以添加新的被选项内容; 效果展示如下: 代码实现封装组件: <template> <span> <el-cascader ref="cascader" v-model=...
  • js下拉列表实现增加和移除选项

    千次阅读 2017-08-31 09:46:15
    select的option属性用法,实现下拉选项增加和移除,可拓展为下一篇城市级联的基础知识。
  • 添加方法: procedure TForm1.FormCreate(S end er: TObject); begin with Button1 do ...按钮,直接在页面上加一个关闭按钮,要打开它,则只能通过其它组件事件来打开了,如菜单、或按钮什么的。
  • 自己的老帖子,移植过来 原地址: ...uid=95681&do=blog&view=me&from=space ...Unity 5 Dropdown下拉按钮的一些基本操作 热度723642015-11-23 20:24|个人分类:UGUI|Unity,Dropdown...
  •  在自动化页面测试过程中会遇到一种场景,有一个表格,点击增加按钮后下方会出现一行内容,并且这一行有选择框,而你还必须进行选择,就像下图所示: 这个第5行的3列全都是选择框,还都必须进行选择,节点可以...
  • 绑定了DateSource的ComboBox是不能用Items.Add方法最近使用了ComboBox控件,简单总结一下有关它的使用(绑定、增加选项、清除):一、ComboBox的绑定 OleDB oledb = new OleDB(); private void Form1_Load...
  • jqgrid表格列选项edittype为text、checkbox、select、textarea、function、超链接 jqgrid两种添加自定义按钮的方式(为jqgrid表格的某一字段的每一行添加自定义按钮、在翻页条添加自定义按钮
  • 如何在标题栏上增加按钮

    千次阅读 2005-01-11 08:50:00
    比如说在主窗口的标题栏上居然有一个按钮。在Internet中随处可见这样的小控件。按钮怎么可以加入到非客户区(Client)呢? ---- 在这里,最关键的一点就是,大家不要被传统知识误导:真的认为它是一个按钮。有名柄...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 129,118
精华内容 51,647
关键字:

如何增加选项按钮