问题描述
我正在为一个项目制作一个计算器,我想要它,如果我按下菜单栏中的一个动作,它就会变成一个科学计算器,如果我取消选中它,它会回到基本计算器。
到目前为止,我能够成功添加科学计算器的按钮,但我希望它位于水平布局的左侧(因此基本按钮在右侧,前进按钮在左侧)但我不知道该怎么做。我也不知道一旦它成为科学计算器,如何将其恢复为基本计算器。同样由于某种原因,科学计算器按钮的操作似乎无法正常工作(如果我键入一个按钮,它应该向 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
;