0915_

import sys
import math
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt  # 有一些常量在这里面,eg:blue
from PyQt5.QtCore import *  # 日历控件


# 下面两行:改任务栏图标,Windows系统需要
# import ctypes
# ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")


class FirstMainWin(QTabWidget):  # 直接一整个屏幕就是一个选项卡窗口
    def __init__(self, parent=None):
        super(FirstMainWin, self).__init__(parent)

        """1、标题尺寸窗口图标"""
        self.setWindowTitle('first mainWindow app')
        # x,y,w,h  & self.resize(1800,1200)
        self.setGeometry(100, 300, 1800, 1200)
        self.setWindowIcon(QIcon('icon/window_icon.jpeg'))

        '''2、创建用于显示控件的窗口'''
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.tab3 = QWidget()
        # 将窗口和选项卡绑定
        self.addTab(self.tab1, 'tab1')
        self.addTab(self.tab2, 'tab2')
        self.addTab(self.tab3, 'tab3')

        self.tab1UI()
        self.tab2UI()
        self.tab3UI()

        '''----------------------------------'''
        # central_Qwidget = self.centralWidget()
        # self.initUI()

    '''===============================函数的分割线1==============================='''

    def tab1UI(self):
        # 表单布局
        ''''''
        '''创建对象'''

        operatorLayout = QHBoxLayout()
        browserLayout = QVBoxLayout()

        addBtn = QPushButton('添加节点')
        updateBtn = QPushButton('修改节点')
        deleteBtn = QPushButton('删除节点')
        self.tree = QTreeWidget()  # 树
        label1 = QLabel(self)
        label2 = QLabel(self)
        self.btn1_pic = QPushButton('加载图片')
        self.btn2_file = QPushButton('加载文本文件')
        # 用标签来作为显示图片的地方
        self.imageLabel = QLabel()
        # 多行编辑框
        self.contents = QTextEdit()

        self.dialog = QFileDialog()

        '''=====================控件设置====================='''
        '''label设置'''
        label1.setText('<font color = red><b>本篇内容来源于b站up主萨古的奶茶计划</b></font>')
        label1.setAlignment(Qt.AlignRight)  # 右对齐

        # 如果设为True,用浏览器打开网页,如果设为False,调用槽函数(我为啥要调用槽函数啊我晕)
        label2.setOpenExternalLinks(True)
        label2.setAutoFillBackground(True)  # 自动填充背景(可以,但没必要==)
        label2.setText(
            "<font color = blue><b><a href='https://space.bilibili.com/511644921'>不懂不懂我百度一下</a></b></font>")
        label2_palette = QPalette()
        label2_palette.setColor(QPalette.Window, Qt.lightGray)  # 设置背景色
        # 对label1设置调色板,这个地方好奇怪。。我前面写错成了label1,颜色就变了?
        label1.setPalette(label2_palette)
        label2.setAlignment(Qt.AlignRight)
        label2.setToolTip('点这里鸭点这里')

        '''树控件设置'''
        # 为树控件指定列数
        self.tree.setColumnCount(2)
        # 指定列标签
        self.tree.setHeaderLabels(['产品', '点击详情'])

        '''根节点'''
        root = QTreeWidgetItem(self.tree)
        root.setText(0, '奶茶品牌')  # 0代表第一列,即Key列,值为root
        root.setText(1, '详细信息')

        '''==================这两行不知道有用没============='''
        root.setIcon(0, QIcon('../picture/bag/bag1.jpg'))  # 为节点设置图标
        self.tree.setColumnWidth(0, 500)  # 第一列列宽设为200

        '''=====这个地方应该可以弄个循环啥的吧或者读取数据之类的==='''
        # 添加子节点child1
        child1 = QTreeWidgetItem(root)
        child1.setText(0, '喜茶')  # 设置key
        child1.setText(1, '1')  # 设置value
        child1.setIcon(0, QIcon('../picture/bag/bag2.jpg'))

        # 为child1添加一个子节点child1_1
        child1_1 = QTreeWidgetItem(child1)
        child1_1.setText(0, '多肉桃李')
        child1_1.setText(1, '1_1')
        child1_1.setIcon(0, QIcon('../picture/bag/bag2.jpg'))

        # 添加子节点child2
        child2 = QTreeWidgetItem(root)
        child2.setText(0, '柰雪的茶')
        child2.setText(1, '2')
        child2.setIcon(0, QIcon('../picture/bag/bag3.jpg'))

        # 为child2添加一个子节点child2_1
        child2_1 = QTreeWidgetItem(child2)
        child2_1.setText(0, '霸气柠檬')
        child2_1.setText(1, '2_1')
        child2_1.setIcon(0, QIcon('../picture/bag/bag2.jpg'))
        # 默认所有节点都处于展开状态
        self.tree.expandAll()

        '''===================信号与槽绑定================'''
        self.tree.clicked.connect(self.onTreeClicked)

        addBtn.clicked.connect(self.addNode)
        updateBtn.clicked.connect(self.updateNode)
        deleteBtn.clicked.connect(self.deleteNode)
        self.btn1_pic.clicked.connect(self.loadImage)
        self.btn2_file.clicked.connect(self.loadText)

        # 布局
        operatorLayout.addWidget(addBtn)
        operatorLayout.addWidget(updateBtn)
        operatorLayout.addWidget(deleteBtn)
        browserLayout.addWidget(label1)
        browserLayout.addWidget(label2)

        gridLayout = QGridLayout()

        gridLayout.addLayout(operatorLayout, 1, 1, 1, 3)
        gridLayout.addWidget(self.tree, 2, 1, 5, 3)
        gridLayout.addWidget(self.btn1_pic, 1, 6, 1, 1)
        gridLayout.addWidget(self.btn2_file, 1, 12, 1, 1)
        gridLayout.addWidget(self.imageLabel, 2, 5, 5, 5)
        gridLayout.addLayout(browserLayout, 15, 15, 1, 2)
        gridLayout.addWidget(self.contents, 2, 11, 5, 5)

        # layout.addRow('地址', QLineEdit())

        '''将第一个选项卡窗口重命名'''
        self.setTabText(0, '来点喝的吧')
        self.tab1.setLayout(gridLayout)  # 别忘了tab1就是一个窗口

    def tab2UI(self):
        form2 = QFormLayout()
        hbox2_1 = QHBoxLayout()  # 水平布局,横向排列
        hbox2_1_button1 = QPushButton('预算')
        hbox2_1_button2 = QPushButton('添加')
        hbox2_1_button3 = QPushButton('图表')
        # 单选框
        hbox2_1.addWidget(hbox2_1_button1)
        hbox2_1.addWidget(hbox2_1_button2)
        hbox2_1.addWidget(hbox2_1_button3)

        '''表格'''

        tableWidget = QTableWidget()
        # 4行3列
        tableWidget.setRowCount(10)
        tableWidget.setColumnCount(6)

        tableWidget.setHorizontalHeaderLabels(
            ['日期', '星期', '收入/支出', '金额(元)', '分类', '备注'])

        textItem = QTableWidgetItem('20220914')
        # setItem:将文本放到单元格中
        tableWidget.setItem(0, 0, textItem)

        # combox设置
        combox_week2 = QComboBox()
        combox_week2.addItem('星期1')
        combox_week2.addItem('星期2')
        combox_week2.addItem('星期3')
        combox_week2.addItem('星期4')
        combox_week2.addItem('星期5')
        combox_week2.addItem('星期六')
        combox_week2.addItem('星期日')

        combox_3 = QComboBox()
        combox_3.addItem('收入')
        combox_3.addItem('支出')

        combox_5 = QComboBox()
        combox_5.addItem('餐饮')
        combox_5.addItem('交通')
        combox_5.addItem('服饰')
        combox_5.addItem('购物')
        combox_5.addItem('服务')
        combox_5.addItem('教育')
        combox_5.addItem('游戏')
        combox_5.addItem('运动')
        combox_5.addItem('生活缴费')
        combox_5.addItem('旅行')
        combox_5.addItem('医疗')
        combox_5.addItem('人情')
        combox_5.addItem('保险')
        combox_5.addItem('其他')

        # setStyleSheet设置控件的样式(QSS)(类似于web中的CSS),即Qt StyleSheet(n.样式表)
        combox_week2.setStyleSheet(
            'QComboBox{margin:3px};')  # 设置控键距离上下左右的单元格的距离(距离)
        # 设置控键距离上下左右的单元格的距离(距离)
        combox_3.setStyleSheet('QComboBox{margin:3px};')
        # 设置控键距离上下左右的单元格的距离(距离)
        combox_5.setStyleSheet('QComboBox{margin:3px};')

        # setCellWidget:将控件放到单元格中
        tableWidget.setCellWidget(0, 1, combox_week2)
        tableWidget.setCellWidget(1, 1, combox_week2)
        tableWidget.setCellWidget(2, 1, combox_week2)
        tableWidget.setCellWidget(3, 1, combox_week2)
        tableWidget.setCellWidget(4, 1, combox_week2)
        tableWidget.setCellWidget(5, 1, combox_week2)
        tableWidget.setCellWidget(6, 1, combox_week2)
        tableWidget.setCellWidget(7, 1, combox_week2)
        tableWidget.setCellWidget(8, 1, combox_week2)
        tableWidget.setCellWidget(9, 1, combox_week2)
        tableWidget.setCellWidget(10, 1, combox_week2)

        tableWidget.setCellWidget(0, 2, combox_3)
        tableWidget.setCellWidget(1, 2, combox_3)
        tableWidget.setCellWidget(2, 2, combox_3)
        tableWidget.setCellWidget(3, 2, combox_3)
        tableWidget.setCellWidget(4, 2, combox_3)
        tableWidget.setCellWidget(5, 2, combox_3)
        tableWidget.setCellWidget(6, 2, combox_3)
        tableWidget.setCellWidget(7, 2, combox_3)
        tableWidget.setCellWidget(8, 2, combox_3)
        tableWidget.setCellWidget(9, 2, combox_3)
        tableWidget.setCellWidget(10, 2, combox_3)

        tableWidget.setCellWidget(0, 4, combox_5)
        tableWidget.setCellWidget(1, 4, combox_5)
        tableWidget.setCellWidget(2, 4, combox_5)
        tableWidget.setCellWidget(3, 4, combox_5)
        tableWidget.setCellWidget(4, 4, combox_5)
        tableWidget.setCellWidget(5, 4, combox_5)
        tableWidget.setCellWidget(6, 4, combox_5)
        tableWidget.setCellWidget(7, 4, combox_5)
        tableWidget.setCellWidget(8, 4, combox_5)
        tableWidget.setCellWidget(9, 4, combox_5)
        tableWidget.setCellWidget(10, 4, combox_5)

        # modifyButton = QPushButton('修改')
        # # 默认是按下的状态
        # modifyButton.setDown(True)
        # modifyButton.setStyleSheet('QPushButton{margin:3px};')
        # tableWidget.setCellWidget(0, 2, modifyButton)

        '''
        self.model = QStandardItemModel(10, 6)  # 二维表10行5列
        # 数据表的字段
        self.model.setHorizontalHeaderLabels(
            ['日期', '星期', '收入&支出', '金额', '分类', '备注'])
        self.tableView = QTableWidget()
        # 关联QTableView控件和Model
        self.tableView.setModel(self.model)
        # 添加数据
        item11 = QStandardItem('20220914')  # 一个QStandardItem就是一个单元格
        item12 = QStandardItem('星期三')     # combobox?
        item13 = QStandardItem('支出')       # 应该比combobox更简单
        item14 = QStandardItem('21.38')     # 输入框,浮点数,两位小数
        item15 = QStandardItem('餐饮')       # combobox:
        item16 = QStandardItem('午饭')       # 长一点。。30字符?
        self.model.setItem(0, 0, item11)
        self.model.setItem(0, 1, item12)
        self.model.setItem(0, 2, item13)
        self.model.setItem(0, 3, item14)
        self.model.setItem(0, 4, item15)
        self.model.setItem(0, 5, item16)
        '''

        '''信号与槽绑定'''
        hbox2_1_button1.clicked.connect(self.showDialog)

        # sex.addWidget(QRadioButton('女'))
        form2.addRow(hbox2_1)
        form2.addRow(tableWidget)
        # grid2.addRow('生日', QLineEdit())
        self.setTabText(1, '记账本')
        self.tab2.setLayout(form2)

    def tab3UI(self):
        '''创建控件的实例,注意Mac与windows的布局问题'''
        '''1、日历'''
        self.cal = QCalendarWidget(self)
        # 设置允许显示的最大/小日期
        self.cal.setMinimumDate(QDate(1900, 1, 1))
        self.cal.setMaximumDate(QDate(2100, 1, 1))
        # 以网格形式显示
        self.cal.setGridVisible(True)
        # 移动位置
        self.cal.move(200, 200)

        # # 标签
        # self.label = QLabel(self)
        # # 获取当前日期
        # date = self.cal.selectedDate()
        # # 格式化
        # self.label.setText(date.toString('yyyy-MM-dd dddd'))  # mm不行
        # self.label.move(600, 700)

        # 信号与槽
        self.cal.clicked.connect(self.showDate)

        '''2、日期和时间'''
        self.label_dateTimeEdit1 = QLabel(self)
        self.label_dateTimeEdit2 = QLabel(self)
        self.label_dateEdit = QLabel(self)
        self.label_timeEdit = QLabel(self)

        self.label_dateTimeEdit1.setText('时间编辑')
        self.label_dateTimeEdit2.setText('当前时间')
        self.label_dateEdit.setText('日期')
        self.label_timeEdit.setText('时间')

        dateTimeEdit1 = QDateTimeEdit()
        dateTimeEdit2 = QDateTimeEdit(QDateTime.currentDateTimeUtc())  # 传入当前时间

        dateEdit = QDateTimeEdit(QDate.currentDate())  # 传入当前日期
        timeEdit = QDateTimeEdit(QTime.currentTime())  # 传入当前日期

        dateTimeEdit1.setDisplayFormat('yyyy-MM-dd HH:mm:ss')
        dateTimeEdit2.setDisplayFormat('yyyy/MM/dd HH:mm:ss')

        dateEdit.setDisplayFormat('yyyy.MM.dd')
        timeEdit.setDisplayFormat('HH:mm:ss')

        '''3、设置字体'''
        self.fontBtn = QPushButton('选择字体')
        self.fontLabel = QLabel('这里显示字体')

        '''4、设置颜色'''

        self.colorBtn = QPushButton('设置字体颜色')
        self.colorBackBtn = QPushButton('设置背景颜色')
        self.colorLabel_button = QLabel('这里显示字体颜色')
        self.colorLabel_background = QLabel('这里显示背景颜色')
        '''5、动态时间'''

        self.label_rightnow_time = QLabel('显示当前时间')
        self.startBtn = QPushButton('开始')
        self.endBtn = QPushButton('结束')

        # 计时器对象
        self.timer = QTimer()
        self.timer.timeout.connect(self.showrightnowTime)

        '''5、滚动条'''
        self.label = QLabel(
            '拖动第一个滚动条颜色变红,\n拖动第二个滚动条颜色变绿,\n拖动第三个滚动条颜色变蓝,\n拖动第四个滚动条滚动')  # 文字内容

        self.scrollbar1 = QScrollBar()  # 滚动条
        self.scrollbar2 = QScrollBar()
        self.scrollbar3 = QScrollBar()
        self.scrollbar4 = QScrollBar()

        self.scrollbar1.setMaximum(1200)  # 滚动条最大值
        self.scrollbar2.setMaximum(1200)
        self.scrollbar3.setMaximum(1200)
        self.scrollbar4.setMaximum(1200)

        '''创建栅格布局'''
        grid3 = QGridLayout()

        '''控件间距'''
        grid3.setSpacing(100)

        '''添加控件'''
        # 行row,列column(可以从0开始),空间上占的行数,空间上占得列数
        # button可以不设置长度的,直接写坐标就好了
        grid3.addWidget(self.cal, 1, 1, 5, 3)
        grid3.addWidget(self.label_dateTimeEdit1, 1, 4, 1, 1)
        grid3.addWidget(self.label_dateTimeEdit2, 2, 4, 1, 1)
        grid3.addWidget(self.label_dateEdit, 3, 4, 1, 1)
        grid3.addWidget(self.label_timeEdit, 4, 4, 1, 1)
        grid3.addWidget(self.label_rightnow_time, 5, 4, 1, 1)

        grid3.addWidget(dateTimeEdit1, 1, 5, 1, 1)
        grid3.addWidget(dateTimeEdit2, 2, 5, 1, 1)
        grid3.addWidget(dateEdit, 3, 5, 1, 1)
        grid3.addWidget(timeEdit, 4, 5, 1, 1)
        grid3.addWidget(self.startBtn, 5, 5, 1, 1)
        grid3.addWidget(self.endBtn, 5, 6, 1, 1)

        grid3.addWidget(self.fontBtn, 1, 7, 1, 1)
        grid3.addWidget(self.fontLabel, 1, 8, 1, 1)
        grid3.addWidget(self.colorBtn, 2, 7, 1, 1)
        grid3.addWidget(self.colorLabel_button, 2, 8, 1, 1)
        grid3.addWidget(self.colorBackBtn, 3, 7, 1, 1)
        grid3.addWidget(self.colorLabel_background, 3, 8, 1, 1)

        grid3.addWidget(self.label, 1, 9, 7, 2)
        grid3.addWidget(self.scrollbar1, 1, 11, 7, 1)
        grid3.addWidget(self.scrollbar2, 1, 12, 7, 1)
        grid3.addWidget(self.scrollbar3, 1, 13, 7, 1)
        grid3.addWidget(self.scrollbar4, 1, 14, 7, 1)
        self.y = self.label.pos().y()

        '''槽'''

        self.cal.clicked.connect(self.showDate)
        self.fontBtn.clicked.connect(self.getFont)
        self.colorBtn.clicked.connect(self.getColor)
        self.colorBackBtn.clicked.connect(self.getBackColor)

        self.scrollbar1.sliderMoved.connect(self.sliderMoved)
        self.scrollbar2.sliderMoved.connect(self.sliderMoved)
        self.scrollbar3.sliderMoved.connect(self.sliderMoved)
        self.scrollbar4.sliderMoved.connect(self.sliderMoved1)

        self.startBtn.clicked.connect(self.startTimer)
        self.endBtn.clicked.connect(self.endTimer)

        '''加布局到total上'''

        self.setTabText(2, '小工具')
        self.tab3.setLayout(grid3)  # 加布局

    '''=============================函数的分割线2=============================='''

    def showDate(self, date):
        # self.label.setText(date.toString('yyyy-MM-dd dddd'))
        self.label.setText(self.cal.selectedDate().toString('yyyy-MM-dd dddd'))

    # 2
    def showDialog(self):
        text = self.sender().text()
        if text == '预算':
            QMessageBox.about(self, '预算', '这是预算')

    # 3 字体
    def getFont(self):
        (font, ok) = QFontDialog.getFont()
        if ok:
            self.fontLabel.setFont(font)

    # 4、字体颜色

    def getColor(self):
        color = QColorDialog.getColor()
        # 调色板
        p = QPalette()
        # 注意WindowText(这是类属性,常量)的大小写,这是常量,别选错了!!!!
        p.setColor(QPalette.WindowText, color)
        # pycharm中自动补全代码提示前符号(eg:f是Field,类属性,常量)的意思:https://blog.csdn.net/lemon4869/article/details/101263102
        # print('QPalette.WindowText =',QPalette.WindowText )
        # print('QPalette.Window =',QPalette.Window)
        print('QPalette.WindowText =', QPalette.WindowText)
        print('QPalette.Window =', QPalette.Window)
        self.colorLabel_button.setPalette(p)

    # 5、背景颜色
    def getBackColor(self):
        color = QColorDialog.getColor()
        p = QPalette()
        p.setColor(QPalette.Window, color)
        # 自动填充背景
        self.colorLabel_background.setAutoFillBackground(True)
        self.colorLabel_background.setPalette(p)

    # 1-4、树的槽
    def onTreeClicked(self, index):  # index是被点击节点的索引
        item = self.tree.currentItem()  # 获得当前单击项
        print('当前处于第%d行' % index.row())  # 输出当前行(自己父节点的第几个值)
        print('key=%s,value=%s' % (item.text(0), item.text(1)))
        print()

    # 1-1 添加节点
    def addNode(self):
        print('添加节点')
        item = self.tree.currentItem()  # 获得当前结点
        print('当前节点是:', item)
        node = QTreeWidgetItem(item)
        node.setText(0, '新节点')
        node.setText(1, '新值')

    # 1-2 修改节点
    def updateNode(self):
        print('修改节点')
        item = self.tree.currentItem()
        item.setText(0, '修改节点')
        item.setText(1, '值已经被修改')

    # 1-3 删除节点
    def deleteNode(self):
        print('删除节点')
        # 防止item是root时,root无父结点报错,要使用下面的写法
        rootFather = self.tree.invisibleRootItem()  # 获得根节点root的不可见的父节点
        for item in self.tree.selectedItems():
            # 父节点不为空
            (item.parent() or rootFather).removeChild(item)

    # 3-1 滚动条变颜色
    def sliderMoved(self):
        print(self.scrollbar1.value(),
              self.scrollbar2.value(), self.scrollbar3.value())
        # 调色版
        palette = QPalette()
        # 最后一个参数是透明度
        c = QColor(self.scrollbar1.value(), self.scrollbar2.value(),
                   self.scrollbar3.value(), 255)
        # 参数一:QPalette.Foreground设置前景色,即标签的颜色  参数2:颜色
        palette.setColor(QPalette.Foreground, c)
        self.label.setPalette(palette)

    # 3-2 滚动条上下移动
    def sliderMoved1(self):
        # 向下移动标签
        self.label.move(self.label.x(), self.y + self.scrollbar4.value())

    # 3-3 动态时间:显示当前时间
    def showrightnowTime(self):
        time = QDateTime.currentDateTime()
        # dddd是星期几
        timeDispaly = time.toString('yyyy-MM-dd hh:mm:ss dddd')
        # 将标签设置成当前时间
        self.label.setText(timeDispaly)

    # 3-4 动态时间,
    def startTimer(self):
        # 参数是时间间隔,1000毫秒
        self.timer.start(1000)
        self.startBtn.setEnabled(False)  # 不能按
        self.endBtn.setEnabled(True)  # 可以按

    # 3-5 停止计时
    def endTimer(self):
        # 停止计时
        self.timer.stop()
        self.startBtn.setEnabled(True)
        self.endBtn.setEnabled(False)

    # 1-6 文件图片对话框-槽函数
    def loadImage(self):
        # 参数三是默认路径(自己随便设),参数四是过滤哪些文件,比如下面就是只显示jpg或者png文件
        #fname,a=QFileDialog.getOpenFileName(self,'打开文件','.','图像文件(*.jpg *.png)')
        fname, _ = QFileDialog.getOpenFileName(
            self, '打开文件', 'D:\\', '图像文件(*.jpg *.png)')
        print(fname)
        print(_)
        self.imageLabel.setPixmap(QPixmap(fname))

    # 1-7 文件图片对话框-设置过滤器
    def loadText(self):
        # 设置打开文件模式
        self.dialog.setFileMode(QFileDialog.AnyFile)  # 任何文件
        # 设置过滤器,只显示过滤器允许的文件类型
        self.dialog.setFilter(QDir.Files)  # ?????????
        if self.dialog.exec():
            # 选择文件
            filenames = self.dialog.selectedFiles()
            print(filenames)  # 列表,就一个元素,就是选中的文件的绝对路径
            f = open(filenames[0], mode='r', encoding='utf-8')  # 打开第一个文件
            # with会自动调用文件的close()函数,防止我们忘记
            with f:
                data = f.read()
                self.contents.setText(data)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon('icon/icon.jpeg'))
    main = FirstMainWin()
    main.show()
    sys.exit(app.exec_())

'''
附录:
茶底/奶/椰,冰糖浆,水果,冰块和水,果汁,小料,芝士
    1、喜茶
        芝芝桃桃,芝芝莓莓,芝芝莓莓桃,芝芝芒芒,芝士绿妍,功夫红豆双皮奶,多肉芒芒甘露,多肉杨梅,多肉葡萄,绿爆柠
        多肉黄皮,雪山思乡龙眼,满杯橙橙,满杯红柚,多肉荔枝,芋泥波波牛乳,超厚牛乳波波,豆豆波波茶,生打椰椰奶冻,雪山满陇金桂,酒酿桂花冻
'''

11 

# 都是mainwindow的,到时候开个单独的窗口试一下
# Mac系统好像显示有问题,去windows试一下吧

12

'''
 12_1 显示表格没有什么问题,问题在怎么设置函数和连接button2上,应该有设置combox和增删改查的方法吧,
 12_2、12_3、12_4没懂。。
 12_1 和12_5 很多不一样。。


'''

 14

'''
目前的问题:
0、槽函数的调用
1、mainwindow添加不上控件:
	14_1_48        	self.setCentralWidget(self.tree)	# 将树控件设为中心控件,即树控件会自动铺满整个屏幕
2、添加节点的时候的循环问题(数据读取问题)
3、value除了汉字支不支持其它格式的问题,能否连接对应槽
4、模版的改动问题
5、没有用过的功能
	14_1_24         self.tree.setColumnWidth(0, 200)  # 第一列列宽设为200 是否生效
	14_1_32			child1.setCheckState(0, Qt.Checked)  # 设置子节点1开启复选框状态

'''

 18

# 18_1 绝对布局就是把控件直接.move(x,y)
 		self.setWindowTitle('绝对布局')
        self.resize(300, 200)	# 与geometry的区别啥的

        self.label1 = QLabel('欢迎', self)
        self.label1.move(15, 20)
# 18_2/4 水平布局/垂直
		# 设置控件之间的间距
        hlayout.setSpacing(40)
        # 老问题,布局叠加

# 18_3 设置控件的对齐方式(可以试一下)
  		'''
        参数二:拉伸量(几个单位),eg:按钮1后面有2个单位的拉伸,按钮2后面有4个单位的拉伸
        参数三:对齐方式,eg:按钮1是按照左上方对齐,其他以此类推
        '''
        hlayout.addWidget(QPushButton('按钮1'), 2, Qt.AlignLeft | Qt.AlignTop)
        hlayout.addWidget(QPushButton('按钮2'), 4, Qt.AlignLeft | Qt.AlignTop)
        hlayout.addWidget(QPushButton('按钮3'), 1, Qt.AlignLeft | Qt.AlignTop)
        hlayout.addWidget(QPushButton('按钮4'), 1, Qt.AlignLeft | Qt.AlignBottom)
        hlayout.addWidget(QPushButton('按钮5'), 1, Qt.AlignLeft | Qt.AlignBottom)

# 18_5 
https://blog.csdn.net/xiaodingqq/article/details/78988339

# 伸缩量,在水平布局里有讲过
layout.addStretch(1)  # 在按钮前面添加伸缩单位

16

# mac系统16_2控件不显示。字体。颜色等控件显示也有问题,
# 16_1 滚动条长度设置有问题
# 16-2 没有在windows系统下实验是否能使用
# 16-3 没有实验因为不知道这个窗口是什么窗口
# 16-4 多个函数多个类不知道怎么办

 8

# 8_6 图片加载的时候,由于放在栅格里,默认居中,影响观感,可考虑把label换成别的还是(图片设置成相同大小)
#	 tab-1 栅格布局,设计一下
''''''
'''
# 一、pyQt5入门
    一.介绍
        1.建议
    二.简述
        1.QApplication
        2. sys.exit(app.exec_())
    三.安装与外部工具的设置
    四. 将.ui文件转化成.py文件
        1.法一(命令行)
        2.法二(配置PYUCI插件) 
        
# 二、pyQt5入门
    一.在QtDesigner中使用水平布局
    二.在QtDesigner中使用垂直布局
    三.向栅格布局中拖动控件
    四.在QtDesigner中同时使用水平布局和垂直布局
    五.在QtDesigner中同时使用栅格布局并向其中拖动控件
    六.表单布局
    七.在容器中完成布局
    八.绝对布局
# 三、PyQt5入门
    一、分割线与间隔
    二、尺寸策略
    三、控件之间的伙伴关系
    四、Tab顺序
    
# 四、信号与槽
# 五、纯代码
    主窗口类型(3种):
    让主窗口居中
    退出应用程序
    屏幕坐标系
    设置窗口和应用程序图标
    控件提示信息
    
# 六、常用控件
    QLabel
        基本用法
        伙伴关系
    QLineEdit控件与回显模式
    限制QLineEdit控件的输入
        校验器
        掩码
    QLineEdit综合案例
    使用QTextEdit控件输入多行文本
# 七、常用控件
    按钮控件(QpushButton)
    单选按钮控件QRatioButton
    复选框控件QCheckBox    (茶,奶,椰奶,)
    下拉列表控件ComboBox    
    滑块控件QSlider
        滑块步长和间隔的区别 
    计数器控件QSpinBox
    
# 八、对话框
@   对话框: QDialog
        Python对象比较(is&==)
            id
            type
            value
    消息对话框 QMessageBox
    输入对话框QInputDialog
@   字体对话框QFontDialog
@   颜色对话框QColorDialog
@   文件对话框QFileDialog(怪有用)
        QFileDialog类中的常用方法
        

    
# 十、拖拽&剪贴板&日历&日期和时间
    一.让控件支持拖拽动作
    二.使用剪贴板
@   三.日历控件
@   四.设置不同风格的日期和时间
    五.日期和时间控件的高级操作
    
# 十一、菜单栏 & 工具栏 & 状态栏 &使用打印机 &显示打印对话框(含输出为PDF)
!   一.创建和使用菜单
!   二.创建和使用工具栏
!   三.创建和使用状态栏 
!   四.使用打印机
!   五.显示打印对话框
# 十二、复杂控件 视图 & MVC设计模式 & 表格(上)
    一.显示二维表数据  
    二.显示列数据  
    三.扩展的列表控件  
    四.扩展的表格控件  
    五.在单元格中放置控件  
    六.在表格中搜索Cell和行定位
    七.设置单元格字体和颜色
    八.按表格的某一列排序
    
# 十三、表格 & 单元格(下)
    一.设置单元格的文本对齐方式
    二.合并单元格
    三.设置单元格的尺寸
    四.在单元格中实现图文混排的效果
    五.改变单元格中图片的尺寸
    六.在表格中显示上下文菜单
    
# 十四、树控件QTreeWidget
@   二.树控件(QTreeWidget)基本用法
@   三.为树节点添加响应时间   
@   四.增加,修改和删除树控件的节点  
@   五.QTreeView控件与系统定制模式
    
# 十五、容器控件
@   一.选项卡控件QTabWidget
    二.堆栈窗口控件QStackedWidget  
    三.停靠控件QDockWidget  
    四.容纳多文档的窗口
# 十六、滚动条 & 动态显示当前时间 & 窗口定时关闭 & 线程类编写计数器
@   二.滚动条控件QScrollBar
@   三.动态显示当前时间
    四.让窗口定时关闭
    五.使用线程类(QThread)编写计数器
    

    
# 十八、布局
!  二.绝对布局
!  三.水平盒布局(QHBoxLayout)
!  四.设置控件的对齐方式
!  五.垂直盒布局
!  六.设置布局的伸缩量
    
# 十九 布局
    一.让按钮永远在窗口的右下角
    二.栅格布局:用循环方式实现计算器UI
    三.栅格布局:进行表单UI设计
    四.表单布局
    五.拖动控件之间的边界(QSplitter)
    
# 二十、信号与槽(上)
    一.信号与槽基础
    二.自定义信号实现对象之间的通信
    三.可以传递多个参数的信号
    四.为类添加多个信号(重载形式的信号)
    五.信号与槽的N对N连接与断开连接
    
# 二十一 信号与槽(中)
    一.为窗口添加信号
    二.多线程更新UI数据
    三.信号与槽自动连接
    四.用Lambda表达式为槽函数传递参数
    五.用partial对象为槽函数传递参数
    六.override(覆盖)槽函数
    
# 二十二 信号与槽下
    一.多窗口交互(1):不使用信号与槽
    二.多窗口交互(2):使用信号与槽
    

# 二十八 用PyInstaller打包PyQt5应用 & 使用PyQtGraph进行数据可视化
    一.用PyInstaller打包PyQt5应用
    二.使用PyQtGraph进行数据可视化
    
# 二十九 SQLite数据库
    一.操作SQLite数据库
    二.使用可视化的方式对SQLite数据库进行增删改查操作
    三.分页显示数据

‘’‘----------------------paint---------------------’‘’
# 九、绘图
    绘制文本
    用像素点绘制正弦曲线
    绘制不同类型的直线
    绘制各种图形
    用画刷填充图形区域

# 十七 Web & JavaScript
    一.用Web浏览器控件(QWebEngineView)显示网页
    二.装载本地Web页面
    三.显示嵌入Web页面
    四.PyQt5调用JavaScript代码,并返回值
    五.JavaScript调用PyhtonAPI计算阶乘

# 二十三 窗口,绘图与特效
    一.设置窗口中控件的风格
    二.设置窗口样式
    三.用代码设置窗口的最大化和最小化
    四.项目实战:实现绘图应用
    五.创建透明和半透明窗口

# 二十四 QSS
    一.QSS基础
    二.使用QSS选择器设置控件样式
    三.QSS子控件选择器
    四. 使用QSS为标签和按钮添加背景图
    五.装载QSS文件

# 二十五 QSS三种设置背景色和背景图片的方式
    一.方式一 QSS
    二.方式二 QPalette
    三.方式三 直接绘制
    
# 二十六 异形窗口
    一.实现不规则窗口(异形窗口)
    二.移动和关闭不规则窗口(异形窗口)
    三. 实现异形窗口动画效果

# 二十七 装载gif动画文件 & 缩放图片 & 动画效果操作窗口
    一.装载gif动画文件
    二.缩放图片
    三.用动画效果改变窗口的尺寸
    四.用动画效果——不同速度移动窗口

'''

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值