GVKun编程网logo

如何在tkcalendar(Python)中获取DateEntry的选定日期?(python获取指定日期)

15

想了解如何在tkcalendar的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于Python中获取DateEntry的选定日期?的相关问题,此外,我们还将为您介绍关于3.3.日期与时间类(D

想了解如何在tkcalendar的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于Python中获取DateEntry的选定日期?的相关问题,此外,我们还将为您介绍关于3.3. 日期与时间类(Date、Calendar、LocalDate等)、android – 如何删除QCalendarWidget中的选定日期矩形和小部件中的小图标、AndroidStudio Calendar.get(Calendar.DAY_OF_MONTH)nullPointer异常、cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);会产生异常数据。的新知识。

本文目录一览:

如何在tkcalendar(Python)中获取DateEntry的选定日期?(python获取指定日期)

如何在tkcalendar(Python)中获取DateEntry的选定日期?(python获取指定日期)

我有一个tkcalendar,它是Calendar,DateEntry的预定义小部件,并试图获取 用户为DateEntry选择的日期。
尽管提供了使用 “ selection_get()” 为“日历”窗口小部件提取所选日期的规定,但没有为我找到的DateEntry提取任何日期。

我已经尝试过get_date(),get(), date(),cget(),.
selection()等等,但是它们似乎没有返回/打印用户选择的日期。请帮忙,如果需要补充信息,请告诉我

代码[摘自一个简单的tkcalendar教程]:

import tkinter as tkfrom tkinter import ttkfrom tkcalendar import Calendar, DateEntrydef calendar_view():    def print_sel():        print(cal.selection_get())    top = tk.Toplevel(root)    cal = Calendar(top,                   font="Arial 14", selectmode=''day'',                   cursor="hand1", year=2018, month=2, day=5)    cal.pack(fill="both", expand=True)    ttk.Button(top, text="ok", command=print_sel).pack()def dateentry_view():    top = tk.Toplevel(root)    ttk.Label(top, text=''Choose date'').pack(padx=10, pady=10)    cal = DateEntry(top, width=12, background=''darkblue'',                    foreground=''white'', borderwidth=2)    cal.pack(padx=10, pady=10)    print(cal.cget(DateEntry))root = tk.Tk()s = ttk.Style(root)s.theme_use(''clam'')ttk.Button(root, text=''Calendar'', command=calendar_view()).pack(padx=10, pady=10)ttk.Button(root, text=''DateEntry'', command=dateentry_view()).pack(padx=10, pady=10)root.mainloop()

答案1

小编典典

您提到您已经尝试过了get_date(),但是没有用,但这实际上是正确的功能。

import tkinter as tkfrom tkinter import ttkfrom tkcalendar import Calendar, DateEntrydef calendar_view():    def print_sel():        print(cal.selection_get())    top = tk.Toplevel(root)    cal = Calendar(top,                   font="Arial 14", selectmode=''day'',                   cursor="hand1", year=2018, month=2, day=5)    cal.pack(fill="both", expand=True)    ttk.Button(top, text="ok", command=print_sel).pack()def dateentry_view():    def print_sel():        print(cal.get_date())    top = tk.Toplevel(root)    ttk.Label(top, text=''Choose date'').pack(padx=10, pady=10)    cal = DateEntry(top, width=12, background=''darkblue'',                    foreground=''white'', borderwidth=2)    cal.pack(padx=10, pady=10)    ttk.Button(top, text="ok", command=print_sel).pack()root = tk.Tk()s = ttk.Style(root)s.theme_use(''clam'')ttk.Button(root, text=''Calendar'', command=calendar_view).pack(padx=10, pady=10)ttk.Button(root, text=''DateEntry'', command=dateentry_view).pack(padx=10, pady=10)root.mainloop()

如果要在每次更改日期时获取日期,则可以使用事件绑定。从文档中:

  • 虚拟活动

<<CalendarSelected>>每次用户用鼠标选择一天时都会生成一个事件。

因此,您可以将获取日期的函数绑定到<<CalendarSelected>>事件:

def dateentry_view():    def print_sel(e):        print(cal.get_date())    top = tk.Toplevel(root)    ttk.Label(top, text=''Choose date'').pack(padx=10, pady=10)    cal = DateEntry(top, width=12, background=''darkblue'',                    foreground=''white'', borderwidth=2)    cal.pack(padx=10, pady=10)    cal.bind("<<DateEntrySelected>>", print_sel)

3.3. 日期与时间类(Date、Calendar、LocalDate等)

3.3. 日期与时间类(Date、Calendar、LocalDate等)

在Java中,我们经常需要处理日期和时间。Java提供了一些类来帮助我们完成这些任务,如DateCalendarLocalDateLocalTimeLocalDateTimeZonedDateTime等。我们将分别介绍这些类,并给出相应的示例。

1. Date类

Date类是Java提供的一个表示日期和时间的类。但是,由于设计上的缺陷,许多方法已经被废弃。因此,我们更推荐使用Calendar类和Java 8中引入的新的日期时间API。

以下是Date类的一些常用方法:

  • Date():构造一个表示当前日期和时间的Date对象。
  • getTime():返回自1970年1月1日0时0分0秒以来的毫秒数。

2. Calendar类

Calendar类是一个抽象类,它提供了一些方法来操作日期和时间。Calendar类的子类如GregorianCalendar,它表示公历日期。Calendar类的常用方法有:

  • getInstance():返回一个表示当前日期和时间的Calendar对象。
  • get(int field):返回指定字段的值。
  • set(int field, int value):设置指定字段的值。
  • add(int field, int amount):给指定字段添加指定的值。
  • getTime():返回表示Calendar对象的日期和时间的Date对象。

以下是Calendar类的一些常量:

  • YEAR:年
  • MONTH:月
  • DATE:日
  • HOUR:小时(12小时制)
  • HOUR_OF_DAY:小时(24小时制)
  • MINUTE:分
  • SECOND:秒

3. LocalDate、LocalTime、LocalDateTime和ZonedDateTime类

Java 8引入了新的日期时间API,包括LocalDateLocalTimeLocalDateTimeZonedDateTime等类。这些类是不可变的,线程安全的,并且设计上更符合实际需求。

以下是这些类的一些常用方法:

  • now():返回表示当前日期或时间的对象。
  • of(...):根据指定的参数创建对象。
  • plusDays(long daysToAdd):返回增加指定天数后的对象。
  • minusDays(long daysToSubtract):返回减去指定天数后的对象。
  • plusHours(long hoursToAdd):返回增加指定小时数后的对象。
  • minusHours(long hoursToSubtract):返回减去指定小时数后的对象。
  • format(DateTimeFormatter formatter):使用指定的格式化器将对象格式化为字符串。

4. 示例

下面是一个使用日期和时间类的示例:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        // 使用Date类
        Date date = new Date();
        System.out.println("当前日期和时间:" + date);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("格式化后的日期和时间:" + sdf.format(date));

        // 使用Calendar类
        Calendar calendar = Calendar.getInstance();
        System.out.println("年:" + calendar.get(Calendar.YEAR));
        System.out.println("月:" + (calendar.get(Calendar.MONTH) + 1)); // 月份从0开始,所以需要加1
        System.out.println("日:" + calendar.get(Calendar.DATE));
        System.out.println("小时:" + calendar.get(Calendar.HOUR_OF_DAY));
        System.out.println("分钟:" + calendar.get(Calendar.MINUTE));
        System.out.println("秒:" + calendar.get(Calendar.SECOND));

        // 使用LocalDate、LocalTime和LocalDateTime类
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();

        System.out.println("当前日期:" + localDate);
        System.out.println("当前时间:" +localTime);
        System.out.println("当前日期和时间:" + localDateTime);

        // 使用ZonedDateTime类
        ZonedDateTime zonedDateTime = ZonedDateTime.now();
        System.out.println("当前日期和时间(带时区):" + zonedDateTime);

        // 格式化日期和时间
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println("格式化后的日期和时间:" + localDateTime.format(formatter));

        // 日期和时间的计算
        LocalDate tomorrow = localDate.plusDays(1);
        System.out.println("明天的日期:" + tomorrow);

        LocalTime oneHourLater = localTime.plusHours(1);
        System.out.println("一小时后的时间:" + oneHourLater);

        LocalDateTime oneWeekLater = localDateTime.plusDays(7);
        System.out.println("一周后的日期和时间:" + oneWeekLater);
    }
}

执行以上代码,将输出类似如下的结果:

当前日期和时间:Tue May 30 15:23:45 CST 2023
格式化后的日期和时间:2023-05-30 15:23:45
年:2023
月:5
日:30
小时:15
分钟:23
秒:45
当前日期:2023-05-30
当前时间:15:23:45.123456789
当前日期和时间:2023-05-30T15:23:45.123456789
当前日期和时间(带时区):2023-05-30T15:23:45.123456789+08:00[Asia/Shanghai]
格式化后的日期和时间:2023-05-30 15:23:45
明天的日期:2023-05-31
一小时后的时间:16:23:45.123456789
一周后的日期和时间:2023-06-06T15:23:45.123456789

以上就是Java常用类库中的日期与时间类的简介和示例。希望这些内容能帮助你理解和使用这些类。如果有任何疑问,请随时提问,我会尽力帮助你。

file

file

参考文章:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

android – 如何删除QCalendarWidget中的选定日期矩形和小部件中的小图标

android – 如何删除QCalendarWidget中的选定日期矩形和小部件中的小图标

我正在编写自己的QCalendarWidget实现.我希望日期可以选择,但我不想看默认选择矩形.它看起来像这样:

我的代码:

in constructor: setSelectionMode(SingleSelection);

void ShiftCalendar::paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
{
        if(date == selectedDate()) {
            fillCell(painter, rect, CalendarWidget::cellFillColor);
        }

        drawCellText(painter, rect, QString::number(date.day()), color);
}

void ShiftCalendar::fillCell(QPainter *painter, const QRect &rect, const QColor &color) const
{
    painter->save();

    painter->setRenderHint(QPainter::Antialiasing);
    painter->setPen(QPen(color));
    painter->setBrush(QBrush(color));
    painter->drawEllipse(fRect.center(), rect.width() / 2, rect.height() / 2);

    painter->restore();
}

我能做什么?

图中可以看到的第二个问题是按钮图标和组合框图标的小尺寸.它在桌面上看起来很好,但在Android上它一直很小.修改图标大小没有任何效果.

编辑:

添加selection-background-color解决了第一个问题:rgba(0,0,0,0);小部件的样式表.第二个仍未解决.

解决方法:

QAbstractItemView *view = findChild<QAbstractItemView*>();

if(view) {

    view->setItemDelegate(//inherit QItemDelegate and override paint event);
}

AndroidStudio Calendar.get(Calendar.DAY_OF_MONTH)nullPointer异常

AndroidStudio Calendar.get(Calendar.DAY_OF_MONTH)nullPointer异常

我的日历有问题。这是代码:

Calendar mCalendar = Calendar.getInstance();mToday[0] = mCalendar.get(Calendar.DAY_OF_MONTH);mToday[1] = mCalendar.get(Calendar.MONTH); // zero basedmToday[2] = mCalendar.get(Calendar.YEAR);

不能运行我的项目,因为在AndroidStudio显示错误Calendar.DAY_OF_MONTHCalendar.MONTH等…我得到nullPointException在模拟器运行时

它说

必须是以下之一:java.util.Calendar.DAY_OF_MONTHjava.util.Calendar.MONTH等…

我不明白此错误,因为它Calendar.MONTH是其中之一java.util.calendar.MONTH

我有进口

import java.util.Calendar;

对不起,我错过了它的初始化,但是还有另一个我想使用Calendar.MONTH的类,如下所示:

mCalendarToday = Calendar.getInstance();...int dayOfWeek = mCalendar.get(Calendar.DAY_OF_WEEK);int firstDay = getDay(mCalendar.get(Calendar.DAY_OF_WEEK);

要么

private Calendar mCalendarToday;...private boolean isToday(int day, int month, int year) {    if (mCalendarToday.get(Calendar.MONTH) == month        && mCalendarToday.get(Calendar.YEAR) == year        && mCalendarToday.get(Calendar.DAY_OF_MONTH) == day) {        return true;    }    return false;}

这里也显示错误。还有我要使用的所有其他行。

答案1

小编典典

看起来像是Android Studio的错误:0.5.5

参见http://code.google.com/p/android/issues/detail?id=68758

cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);会产生异常数据。

cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);会产生异常数据。

<p><a href="http://static.oschina.net/uploads/img/201307/27011628_B4oK.jpg"><imgtitle="QQ图片20130727010711" border="0" alt="QQ图片20130727010711" src="http://static.oschina.net/uploads/img/201307/27011629_m5NE.jpg" width="438" height="226" /></a><a href="http://static.oschina.net/uploads/img/201307/27011809_NGZL.jpg"><imgtitle="QQ图片20130727010658" border="0" alt="QQ图片20130727010658" src="http://static.oschina.net/uploads/img/201307/27011810_Mk9e.jpg" width="391" height="233" /></a></p> <p>&#160;</p> <p>右边的图输出的结果是有问题,理应输出的结果为&#160; 2018-12-24,查阅了资料以后发现 ,这算是JDK(准确地说是 GregorianCalendar)的一个bug(或是不方便之处)。</p> <p>jdk的bug系统里面有人提过这样的bug,但是好像处理结果挺奇怪的。见 <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6289214">JDK-6289214 : (cal) Calendar returns bad values if a first get is not call before a set of a weekday</a></p> <p>其中提出问题者使用的代码为:</p> <p><a href="http://static.oschina.net/uploads/img/201307/27011632_4bbz.png"><imgtitle="image" border="0" alt="image" src="http://static.oschina.net/uploads/img/201307/27011634_Bejx.png" width="477" height="250" /></a></p> <p>JDK官方给出的诊断方案为:&#160; 简单地概括成一句话就是:在set(DAY_OF_WEEK)方法之前先调用一个get方法,例如 cal.get(Calendar.DAY_OF_WEEK);</p> <p><a href="http://static.oschina.net/uploads/img/201307/27011634_nUd1.png"><imgtitle="image" border="0" alt="image" src="http://static.oschina.net/uploads/img/201307/27011636_NowQ.png" width="611" height="183" /></a></p> <p>&#160;</p> <p><font color="#ff0000">另: Calendar cal = Calendar.getInstance();&#160; 得到的 cal 对象 其实是子类 GregorianCalendar&#160; 类型的。</font></p>

我们今天的关于如何在tkcalendarPython中获取DateEntry的选定日期?的分享已经告一段落,感谢您的关注,如果您想了解更多关于3.3. 日期与时间类(Date、Calendar、LocalDate等)、android – 如何删除QCalendarWidget中的选定日期矩形和小部件中的小图标、AndroidStudio Calendar.get(Calendar.DAY_OF_MONTH)nullPointer异常、cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);会产生异常数据。的相关信息,请在本站查询。

本文标签: