微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 PyQt6 中触发操作时如何添加/删除布局?如何更改布局的顺序?

如何解决在 PyQt6 中触发操作时如何添加/删除布局?如何更改布局的顺序?

我正在为一个项目制作一个计算器,我想要它,如果我按下菜单栏中的一个动作,它就会变成一个科学计算器,如果我取消选中它,它会回到基本计算器。

到目前为止,我能够成功添加科学计算器的按钮,但我希​​望它位于水平布局的左侧(因此基本按钮在右侧,前进按钮在左侧)但我不知道该怎么做。我也不知道一旦它成为科学计算器,如何将其恢复为基本计算器。同样由于某种原因,科学计算器按钮的操作似乎无法正常工作(如果我键入一个按钮,它应该向 QLineEdit 添加文本)。我很茫然,因为我不知道从哪里开始。

下面我创建了一个简单的例子来说明我用我的计算器做了什么。

import sys,os
from PyQt6.QtCore import *
from PyQt6.QtWidgets import *
from PyQt6.QtGui import *

class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()

        self.allbuttons = {}
        #self.setFixedSize(200,200)
        self.setwindowTitle('Try')

        self.verlayout = QVBoxLayout()
        self.horlayout = QHBoxLayout()

        self.qline()
        self.wid1()


        self.verlayout.addLayout(self.horlayout)

        self.centralwidget = QWidget()
        self.setCentralWidget(self.centralwidget)
        self.centralwidget.setLayout(self.verlayout)

    def qline(self):

        self.line = QLineEdit()
        self.line.setFixedHeight(35)
        self.verlayout.addWidget(self.line)

    def wid1(self):

        buttons = qgridLayout()
        buttondict = {
        'A': (0,0),'B': (0,1),'C': (1,'D': (1,1)
        }

        for btn,pos in buttondict.items():

            self.allbuttons[btn] = QPushButton(btn)

            self.allbuttons[btn].setFixedSize(20,20)
            buttons.addWidget(self.allbuttons[btn],pos[0],pos[1])

        self.horlayout.addLayout(buttons)

    def wid2(self):

        buttons = qgridLayout()
        buttondict = {
        'E': (0,'F': (0,'G': (1,'H': (1,pos[1])

        self.horlayout.addLayout(buttons)

class Menu:

    def __init__(self,MainWindow):

        super().__init__()

        self.view = MainWindow

        self.menuBar = QMenuBar()
        self.menuBar.setGeometry(QRect(0,277,22))
        self.view.setMenuBar(self.menuBar)
        self.open = QMenu(self.menuBar)
        self.open.setTitle('Open')
        self.menuBar.addAction(self.open.menuAction())
        self.this = QAction(self.menuBar)
        self.this.setText('This')
        self.this.setCheckable(True)
        self.open.addAction(self.this)
        
        self.this.triggered.connect(self.show_new_window)

    def show_new_window(self,checked):
        
        if checked:

            self.view.wid2()
            #self.view.resize(300,200)

        else:

            pass

app = QApplication(sys.argv)
w = MainWindow()
m = Menu(w)
w.show()
app.exec()

解决方法

与其删除和添加布局,不如使用 QStackedWidget:

   SELECT 'COL_A' AS Column_Name,a.COL_A AS ID,COUNT(DISTINCT (a.TRNSCT_NBR||a.LNE_NBR)) AS Transactions,COUNT(DISTINCT a.TRNSCT_DTS) AS Transaction_Dates,SUM(a.AMOUNT_PAID) AS Total_Paid

   FROM LARGE_TRANSACTION_VIEW a
   INNER JOIN SMALL_TABLE c
          ON a.COL_A  = c.COL
   WHERE a.COL_X >= '1000'
          AND a.COL_Y BETWEEN ('T100') AND ('T900')
   GROUP BY 'COL_A',a.COL_A 

  UNION

   SELECT 'COL_B' AS Column_Name,b.COL_B AS ID,COUNT(DISTINCT (b.TRNSCT_NBR||b.LNE_NBR)) AS Transactions,COUNT(DISTINCT b.TRNSCT_DTS) AS Transaction_Dates,SUM(b.AMOUNT_PAID) AS Total_Paid

   FROM LARGE_TRANSACTION_VIEW b
   INNER JOIN SMALL_TABLE c
          ON b.COL_B  = c.COL
   WHERE b.COL_X >= '1000'
          AND b.COL_Y BETWEEN ('T100') AND ('T900')
   GROUP BY 'COL_B',b.COL_B 
;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。