문제로 기능을 복제하고 세계에서 변수 PySide6 응용 프로그램,여 인쇄하는 기능이 낮과 달 중복을 때 버튼을 눌렀

0

질문

나는 초보자가 알고있는 무언가가있을 놓쳤지만 나는 정확히 알 수 없다,그래서 나는 PySide6 응용 프로그램,그리고 생성하는 함수를 생성해 달력에 QTableWidget 달력을 사용하여 모듈에서는 파이썬 모든지 문제가 되었을 때 나를 추가하려는 탐색 버튼을 얻을 다음과 이전의 달: 이것이 나의 기능:

import sys
import os
import platform
import datetime as dt
import time
import calendar

from PySide6 import *
from PySide6 import QtGui
from PySide6 import QtWidgets
from PySide6 import QtCore
from PySide6.QtGui import QColor

from functools import partial

yy = int(dt.datetime.now().strftime("%Y"))
mm = int(dt.datetime.now().strftime("%m"))

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        global widgets
        widgets = self.ui

        # Calender generator
        self.calender_gen(mm,yy)



    def calender_gen(self, mm_g, yy_g):
        # Creat table rows and columns
        widgets.tableWidget_3.setRowCount(5)
        widgets.tableWidget_3.setColumnCount(7)

        # Table header labels
        week_list = ["Sat","Sun","Mon","Tue","Wed","Thu","Fri"]
        widgets.tableWidget_3.setHorizontalHeaderLabels(week_list)

        # Start inserting days of the month into the table
        row = 0
        col = 0
        for week in calendar.monthcalendar(yy_g,mm_g):
            for day in week:
                if day == 0:
                    widgets.tableWidget_3.setItem(row,col,QTableWidgetItem(" "))
                else:
                    widgets.tableWidget_3.setItem(row,col,QTableWidgetItem(str(day)))
                col += 1
            row += 1
            col = 0
        print(mm_g,yy_g)
        # Connect Buttons to function
        widgets.pushButton_3.clicked.connect(partial(self.next_calendar_butt,mm_g,yy_g))
        widgets.pushButton_2.clicked.connect(partial(self.prev_calendar_butt,mm_g,yy_g))

    def next_calendar_butt(self,mm_new, yy_new):
        mm_new += 1
        if mm_new > 12:
            mm_new = 1
            yy_new += 1

        widgets.tableWidget_3.setRowCount(0)
        widgets.tableWidget_3.setColumnCount(0)
        self.calender_gen(mm_new,yy_new)

    def prev_calendar_butt(self,mm_g_new,yy_g_new):
        mm_g_new -= 1
        if mm_g_new == 0:
            mm_g_new = 12
            yy_g_new -= 1

        widgets.tableWidget_3.setRowCount(0)
        widgets.tableWidget_3.setColumnCount(0)
        self.calender_gen(mm_g_new,yy_g_new)

을 실행할 때 응용 프로그램 일정에서 보여줍니다 테이블에서 이미지 의 이미지 GUI 테이블

콘솔 출력 콘솔의 인쇄 11 2021 년

클릭할 때에 pushButton_3 을 위한 첫 번째 클릭하십시오 그것은 일반적으로 작동하고 인쇄'12 2021 년에서'콘솔 콘솔의 인쇄 12 2021 년 그러나 클릭한 후에 같은 버튼을 다시 시작합 복제:본체에 인쇄'12 2021 년 1 2022' 콘솔의 인쇄 12 2021 년 1 2022 면 내가 다시 클릭하여 인쇄'12 2021 1 2022 1 2022 2 2022' 으로 이미지에 입력한 이미지 설명을 여기에 모든 클릭으로 그것이 중복을 더디어야만 인쇄 하나의 문 i.e'2 2022'

를 아래의 calendar_gen()함수 그러나 내가 시스템의 사소한 문제일 수 있으 제공하수도 선언 후에 전역 변수를 할당하여 매개변수:

widgets.pushButton_3.clicked.connect(partial(self.next_calendar_butt,mm_g,yy_g))
widgets.pushButton_2.clicked.connect(partial(self.prev_calendar_butt,mm_g,yy_g))

나는 이렇게 했: 내부 calendar_gen()함수에서 나는 선언의 글로벌 변수를 할당하는 기능 매개 변수를 만들기 위해서 무언가를 좋아하는 글로벌 매개변수

global var_mm
global var_yy

var_mm = mm_g
var_yy = yy_g

다음에 init(자)기능을 넣어 2 라인:

def __init__(self):
    widgets.pushButton_3.clicked.connect(partial(self.next_calendar_butt,var_mm,var_yy))
    widgets.pushButton_2.clicked.connect(partial(self.prev_calendar_butt,var_mm,var_yy))

하지만 이 작동하지 않는 콘솔에서 그것을 인쇄'11 2021 년'나는 응용 프로그램을 실행한 다음]을 클릭하면서 pushButton_3 인쇄'12 2021'때 내가 다시 클릭하에 그것은,그것을 인쇄'12 2021'다시 등 과 같은 다른 버튼 그것을 인쇄'10 2021'다시 다시

global-variables pyqt pyqt6 pyside6
2021-11-21 22:34:07
1

최고의 응답

0

Qt 신호 연결되지 않은 배타(기본),및 신호 연결 될 수 있습 같습니다.

이후 당신을 연결하는 clicked 신호의 버튼에서 calender_gen마다하는 기능이라고 당신에 추가 추가로 연결하는 그 신호가 있습니다. 그 결과 연결된 함수를 호출됩니다 많은 시간으로 그들은 연결되어 모든 시간 신호가 방출됩니다.

적절한 솔루션을 연결하는 기능 스위치를 달을 참조하여 현재의 달에 대한"새로운"한 달에 의존하고 있습니다.

이 기능은 거의 동일합니다,그것의 더 나은 그들을 그룹에서는 고유한 기능을,그 다음 연결하는 별도의 신호를 기능을하는 것이 결국 전화는 전기능으로 적절한 매개변수:

class MainWindow(QMainWindow):
    def __init__(self):
        # ...
        self.calender_gen(mm,yy)

        self.pushButton_2.clicked.connect(self.prev_month)
        self.pushButton_3.clicked.connect(self.next_month)

    def calender_gen(self, mm_g, yy_g):
        # Creat table rows and columns
        self.tableWidget_3.setRowCount(5)
        self.tableWidget_3.setColumnCount(7)

        # Table header labels
        week_list = ["Sat","Sun","Mon","Tue","Wed","Thu","Fri"]
        self.tableWidget_3.setHorizontalHeaderLabels(week_list)

        # Start inserting days of the month into the table
        row = 0
        col = 0
        for week in calendar.monthcalendar(yy_g,mm_g):
            for day in week:
                if day == 0:
                    self.tableWidget_3.setItem(row,col,QTableWidgetItem(" "))
                else:
                    self.tableWidget_3.setItem(row,col,QTableWidgetItem(str(day)))
                col += 1
            row += 1
            col = 0

        self.current_month = mm_g
        self.current_year = yy_g

    def prev_month(self):
        self.step_month(-1)

    def next_month(self):
        self.step_month(1)

    def step_month(self, delta):
        mm_new = self.current_month + delta
        mm_year = self.current_year
        if mm_new > 12:
            mm_new = 1
            mm_year += 1
        elif mm_new < 1:
            mm_new = 12
            mm_year -= 1

        self.calender_gen(mm_new, mm_year)

물론,제대로 구현 QCalendarWidget 수 있습이 훨씬 더 간단하고,그것은 이미로 제공하는 대부분의 기능입니다.

2021-11-21 23:56:46

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................