PyQt5在QWidget窗体中显示Qwidget的自定义类

【概览】

1、显示原生Qwidget

1)不使用布局(绝对定位)

2)使用布局

2、显示Qwidget的自定义类

1)不使用布局(绝对定位)

      2)使用布局

【知识点】

1、显示原生Qwidget

1)不使用布局(绝对定位)

这种情况下,原生QWidget部件在实例化时必须带parent参数,当然parent = self,即:  self.widget = QWidget(self)

 1 class MyWindow(QWidget):
 2     def __init__(self, parent=None):
 3         super(MyWindow,self).__init__(parent)
 4         self.resize(400, 300)
 5
 6         # 添加原生QWidget
 7         self.widget = QWidget(self) # 注意QWidget(self) 内的self!!
 8         self.widget.setGeometry(10,10,380,250)
 9         self.widget.setStyleSheet("background-color:grey;")
10
11         # 添加编辑框(QLineEdit)
12         self.lineEdit = QLineEdit("0",self) # 注意QLineEdit("0",self) 内的self!!
13         self.lineEdit.setGeometry(10,270,380,20)

【效果图】

2)使用布局

这种情况下,原生QWidget部件在实例化时可以不带parent参数,parent =None / self都行,即: self.widget = QWidget()或 self.widget = QWidget(self)

class MyWindow(QWidget):
    def __init__(self, parent=None):
        super(MyWindow,self).__init__(parent)
        self.resize(400, 300)
        layout = QGridLayout()

        # 添加原生QWidget
        self.widget = QWidget()  # 注意QWidget() 内可以没有self!!
        self.widget.setStyleSheet("background-color:grey;")

        # 添加编辑框(QLineEdit)
        self.lineEdit = QLineEdit("0") # 注意QLineEdit("0") 内可以没self!!

        # 放入布局内
        layout.addWidget(self.widget,0,0)
        layout.addWidget(self.lineEdit,1,0)
        self.setLayout(layout)

【效果图】

2、显示Qwidget的自定义类

1)不使用布局(绝对定位)

这种情况下,原生QWidget自定义类里面要放个东西!!不放东西的话,我也不会:(

 1 class MyWidget(QWidget):
 2     def __init__(self, parent=None):
 3         super(MyWidget,self).__init__(parent)
 4
 5         #QWidget自定义类里面要放个东西!!(不放东西的话,我也不会)
 6         self.gb = QGroupBox(self)
 7         self.gb.setGeometry(0,0,200,200) #一定要有个东西把它撑起来!!不然看不到
 8         self.setStyleSheet("background-color:grey;")
 9
10         self.do_something()
11
12     def do_something(self):
13         pass
14
15
16 class MyWindow(QWidget):
17     def __init__(self, parent=None):
18         super(MyWindow,self).__init__(parent)
19         self.resize(400,300)
20
21         # 添加自定义部件(MyWidget)
22         self.widget = MyWidget(self)
23         self.widget.setGeometry(10,10,380,240)
24
25
26         # 添加编辑框(QLineEdit)
27         self.lineEdit = QLineEdit("0",self)
28         self.lineEdit.setGeometry(10,260,380,20)
29
30         

【效果图】

2)使用布局

这种情况下,原生QWidget部件在实例化时可以不带parent参数,parent =None / self都行,即: self.widget = QWidget()或 self.widget = QWidget(self)

 1 class MyWindow(QWidget):
 2     def __init__(self, parent=None):
 3         super(MyWindow,self).__init__(parent)
 4         self.resize(400,300)
 5         layout = QGridLayout()
 6
 7         # 添加自定义部件(MyWidget)
 8         self.widget = MyWidget()
 9
10         # 添加编辑框(QLineEdit)
11         self.lineEdit = QLineEdit("0")
12
13         # 放入布局内
14         layout.addWidget(self.widget,0,0)
15         layout.addWidget(self.lineEdit,1,0)
16         self.setLayout(layout)
17
18         self.setWindowTitle("4、QWidget的自定义类")

【效果图】

【源代码】(依次)

 1 from PyQt5.QtCore import *
 2 from PyQt5.QtGui import *
 3 from PyQt5.QtWidgets import *
 4
 5
 6
 7 class MyWindow(QWidget):
 8     def __init__(self):
 9         super(MyWindow,self).__init__()
10         self.resize(400, 300)
11
12         # 添加原生QWidget
13         self.widget = QWidget(self) # 注意QWidget(self) 内的self!!
14         self.widget.setGeometry(10,10,380,250)
15         self.widget.setStyleSheet("background-color:grey;")
16
17         # 添加编辑框(QLineEdit)
18         self.lineEdit = QLineEdit("0",self) # 注意QLineEdit("0",self) 内的self!!
19         self.lineEdit.setGeometry(10,270,380,20)
20
21         self.setWindowTitle("1、原生QWidget")
22
23
24 if __name__ == ‘__main__‘:
25     import sys
26     app = QApplication(sys.argv)
27     dialog = MyWindow()
28     dialog.show();
29     sys.exit(app.exec_())   

 1 from PyQt5.QtCore import *
 2 from PyQt5.QtGui import *
 3 from PyQt5.QtWidgets import *
 4
 5
 6
 7 class MyWindow(QWidget):
 8     def __init__(self):
 9         super(MyWindow,self).__init__()
10         self.resize(400, 300)
11         layout = QGridLayout()
12
13         # 添加原生QWidget
14         self.widget = QWidget()
15         self.widget.setStyleSheet("background-color:grey;")
16
17         # 添加编辑框(QLineEdit)
18         self.lineEdit = QLineEdit("0")
19
20         # 放入布局内
21         layout.addWidget(self.widget,0,0)
22         layout.addWidget(self.lineEdit,1,0)
23         self.setLayout(layout)
24
25         self.setWindowTitle("2、原生QWidget")
26
27 if __name__ == ‘__main__‘:
28     import sys
29     app = QApplication(sys.argv)
30     dialog = MyWindow()
31     dialog.show();
32     sys.exit(app.exec_())   

 1 from PyQt5.QtCore import *
 2 from PyQt5.QtGui import *
 3 from PyQt5.QtWidgets import *
 4
 5
 6 class MyWidget(QWidget):
 7     def __init__(self, parent=None):
 8         super(MyWidget,self).__init__(parent)
 9
10         #QWidget派生类里面要放个东西!!(不放东西的话,我也不会)
11         self.gb = QGroupBox(self)
12         self.gb.setGeometry(0,0,200,200) #一定要有个东西把它撑起来!!不然看不到
13         self.setStyleSheet("background-color:grey;")
14
15         self.do_something()
16
17     def do_something(self):
18         pass
19
20
21 class MyWindow(QWidget):
22     def __init__(self, parent=None):
23         super(MyWindow,self).__init__(parent)
24         self.resize(400,300)
25
26         # 添加自定义部件(MyWidget)
27         self.widget = MyWidget(self)
28         self.widget.setGeometry(10,10,380,240)
29
30
31         # 添加编辑框(QLineEdit)
32         self.lineEdit = QLineEdit("0",self)
33         self.lineEdit.setGeometry(10,260,380,20)
34
35         self.setWindowTitle("3、QWidget的派生类")
36
37 if __name__ == ‘__main__‘:
38     import sys
39     app = QApplication(sys.argv)
40     window = MyWindow()
41     window.show();
42     sys.exit(app.exec_())   

 1 from PyQt5.QtCore import *
 2 from PyQt5.QtGui import *
 3 from PyQt5.QtWidgets import *
 4
 5 class MyWidget(QWidget):
 6     def __init__(self, parent=None):
 7         super(MyWidget,self).__init__(parent)
 8
 9         #QWidget派生类里面要放个东西!!(不放东西的话,我也不会)
10         self.gb = QGroupBox(self)
11         self.gb.setGeometry(0,0,200,200) #一定要有个东西把它撑起来!!不然看不到
12         self.setStyleSheet("background-color:red;")
13         self.do_something()
14
15     def do_something(self):
16         pass
17
18
19
20 class MyWindow(QWidget):
21     def __init__(self):
22         super(MyWindow,self).__init__()
23         self.resize(400,300)
24         layout = QGridLayout()
25
26         # 添加自定义部件(MyWidget)
27         self.widget = MyWidget(self) # sizeHint() = QSize(-1, -1)
28         self.widget.setStyleSheet("background-color:red;")
29
30         # 添加编辑框(QLineEdit)
31         self.lineEdit = QLineEdit("0",self) # sizeHint() = QSize(75, 20)
32
33         # 放入布局内
34         layout.addWidget(self.widget,0,0)
35         layout.addWidget(self.lineEdit,1,0)
36         self.setLayout(layout)
37
38
39
40 if __name__ == ‘__main__‘:
41     import sys
42     app = QApplication(sys.argv)
43     window = MyWindow()
44     window.show();
45     sys.exit(app.exec_())   

时间: 2024-10-03 14:55:51

PyQt5在QWidget窗体中显示Qwidget的自定义类的相关文章

QWidget窗体中使用Q_OBJECT后无法添加背景图片或背景色

在继承自QWiget的窗体中,设置背景图片或背景色比较简单的方法是使用setStyleSheet()函数,比如在构造函数中可以这样来设置背景图片: this->setStyleSheet("border-image: url(:/background.jpg)"); 但是如果窗体类中使用了Q_OBJECT,则这种方法没有效果,解决办法是使用setAttribute()函数,如下: this->setAttribute(Qt::WA_StyledBackground); th

wpf 窗体中显示当前系统时间

先看一下效果: 这其实是我放置了两个TextBlock,上面显示当前的日期,下面显示时间. 接下来展示一下代码: 在XAML中: <StackPanel Width="205"                    Margin="0,0,57,0"                    HorizontalAlignment="Right">            <TextBlock Height="Auto&qu

VCCListCtrl显示长字符串自定义类

1.h 1 #pragma once 2 3 4 // CMyListCtrl 5 6 class CMyListCtrl : public CListCtrl 7 { 8 DECLARE_DYNAMIC(CMyListCtrl) 9 10 public: 11 CMyListCtrl(); 12 virtual ~CMyListCtrl(); 13 14 CString GetItemText(int nItem, int nSubItem) const; 15 void DrawItem(L

自定义的类型放入STL的set中,需要重载自定义类中的“&lt;”符号(转)

在以前学习STL的时候,曾经学到过,如果要将自定义的类型放入到set中的话,就需要重载“<”符号,原因是set是一个有序的集合,集合会按照“<”比较的大小,默认按照从小到大的顺序排列.假设我现在设计如下类型: class MyType { public: int a, b, c; } 这是,为了让MyType类型可以顺利的放进set中,我必须重载“<”,这时问题来了,要如何重载呢?这个类型有三个数据成员,我能不能要求按照a的大小排列,如果a相等的话就随便按照b或者c的大小排列呢?如果近实

winfrom向窗体中拖放图片并显示

首先要设置窗体的AllowDrop属性为true.然后在窗体的DragEnter事件中添加如下代码:调用自定义的显示图片的方法. #region "在用鼠标将某项拖放到区域时事件" private void Form1_DragEnter(object sender, DragEventArgs e) { // this.AllowDrop = true; //在窗体中显示拖放到窗体上的图片 SetDragImageToForm(this.pictureBox1, e); } #end

C#操作数据库,将其查查出来的记录条数显示在winform窗体中的方法之一

1 //1.数据库链接的基本操作(略) 2 //2.创建对象函数(关键部分) 3 sqlConn.Open(); 4 //初始化定义记录条数 5 int n = 0; 6 object obj = sqlComm.ExecuteScalar();//创建对象(ExecuteScalar()函数是获取所查的记录中的第一行第一列数据.) 7 int.TryParse(obj.ToString(), out n);//获取所查询的记录条数 8 string a = n.ToString();//将记录

在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体

在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体ShowAllPage sAllPage = new ShowAllPage();          //  sAllPage.FormBorderStyle = FormBorderStyle.None;           // sAllPage.Dock = DockStyle.Fill;            sAllPage.TopLevel = false;            this.MainPanel.Controls.

ExtJS 中自定义类

首先我们来看一看在Javascript中,是怎样自定义类的: var Person = function (name, age) { this.Name = ""; this.Age = 0; this.Say = function (msg) { alert(this.Name + " Says : " + msg); } this.init = function (name, age) { this.Name = name; this.Age = age; }

(转)WPF中让窗体不显示最大化,最小化,关闭按钮

1.在WPF中如果不想让窗体显示最大化,最小化,以及关闭按钮的话,可以再窗体的属性面板设置 将ResizeMode=NoResize时,将不会显示最大化最小化,只有关闭按钮:如下图: 将ResizeMode=CanMinimize时,最大化按钮被禁用,但是还是会显示,不能按,最小化,关闭按钮正常显示: 将WindowStyle=None时,将不会显示出最大化,最小化,以及关闭按钮,周围的边框也不存在. 还有一种方式: WPF:窗体不显示或禁用最大化.最小化.关闭按钮.图标以及对话框显示